我想打印文件的内容。我试着使用字符串缓冲区:
let ch = open_in "myfile.txt" in
let buf = Buffer.create 1024 in
(try Buffer.add_channel buf ch max_int with _ -> ());
close_in ch;
let string = Buffer.contents buf
print_endline string
这只是给我一个语法错误。
我该怎么做?
答案 0 :(得分:2)
您需要提供正确的频道长度:
let ic = open_in "foo" in
let len = in_channel_length ic in
let buf = Buffer.create len in
Buffer.add_channel bif ic len;
let str = Buffer.contents b in
print_endline str
答案 1 :(得分:0)
我看到的唯一语法错误是在in
之后缺少let string = Buffer.contents buf
。
Buffer.add_channel
的目的是将给定通道中给定数量的字符精确添加到缓冲区。除非文件"myfile.txt"
特别大,否则打印时缓冲区将为空。
事实上,在我的系统(64位系统)上,max_int
非常大,Buffer.add_channel
甚至没有尝试读取那么多数据。它引发Invalid_argument
例外。