如何在ocaml中将文件截断为N大小?
我没有在Pervasive中看到一个功能。最接近的是“open_trunc”标志,我不确定它的作用。
答案 0 :(得分:3)
如果您使用的是Unix,则可以使用
val Unix.truncate : string -> int -> unit
它“将指定文件”运行到给定大小“。 但是这个功能没有在Windows版本的OCaml中实现(或者更确切地说,它没有被模拟)。
如果您在Windows下并想要模仿它,您可能会对
感兴趣val really_input : in_channel -> string -> int -> int -> unit
“really_input ic buf pos len
从频道len
中读取ic
个字符,将其存储在字符串buf
中,从字符编号pos
开始。提升End_of_file
如果在读取len
个字符之前已到达文件末尾。如果Invalid_argument "really_input"
和pos
未指定len
的有效子字符串,则引发buf
。“
答案 1 :(得分:2)
我认为你是对的。 open_trunc - 打开要写入的命名文件,并在该文件上返回一个新的输出通道,位于文件的开头。如果文件已存在,则文件将被截断为零长度。如果它尚不存在,则创建它。如果无法打开文件,请提高 Sys_error 。
请参阅此链接also。
答案 2 :(得分:2)
Pervasives的操作系统功能大致与标准C中的操作相对应。没有功能可以在标准C中将文件截断为指定的长度,所有可以做的就是在打开文件时将文件截断为空(通过Open_trunc
标志暴露)。在Unix / POSIX中有一个(truncate
),所以在Unix
module中查找它,它具有truncate
函数(或ftruncate
用于打开文件,关注Unix/POSIX)。