Dark Mode

Reading a File in OCaml on Windows

The trivial way to read a file into a string in OCaml is this (thanks, StackOverflow):

let read_file_to_string (path: string): string =
let stream = open_in path in
try
let len = in_channel_length stream in
let str = really_input_string stream len in
close_in stream;
str
with _ ->
close_in_noerr stream;
raise (Failure ("Failed to read file: " ^ path))

But this doesn't work on Windows: really_input_string throws End_of_file because the readable length of the file is less than the length attested by in_channel_length. I don't care to debug this. This alternative implementation works:

let read_file_to_string (path: string): string =
let rec read_stream stream =
try
let line = input_line stream in
line :: (read_stream stream)
with End_of_file ->
[]
in
let stream = open_in path in
String.concat "\n" (read_stream stream)

This was the one thing preventing the bootstrapping compiler for Austral from working on Windows.

Published 12 September, 2021
Previous Languages are not Ecosystems
Next Signed Integers are Asymmetrical