3

如何在 ocaml 中将文件截断为 N 大小?

我没有在 Pervasive 中看到函数。最接近的是“open_trunc”标志,我不太确定它的作用。

4

3 回答 3

3

如果你在 Unix 下,你可以使用

val Unix.truncate : string -> int -> unit

它“将命名文件运行到给定的大小”。但是这个功能在 OCaml 的 Windows 版本中没有实现(或者更准确地说,它没有被模拟)。

如果您在 Windows 下并想模拟它,您可能会对

val really_input : in_channel -> string -> int -> int -> unit

“从通道really_input ic buf pos len读取字符,将它们存储在字符串中,从字符编号开始。如果在读取字符之前到达文件末尾,则引发。如果并且不指定有效的子字符串,则引发。”lenicbufposEnd_of_filelenInvalid_argument "really_input"poslenbuf

于 2012-09-15T13:37:36.727 回答
2

我认为你是对的。 open_trunc - 打开指定文件进行写入,并在该文件上返回一个新的输出通道,位于文件的开头。如果文件已经存在,则将其截断为零长度。如果它不存在,则创建它。如果文件无法打开,则引发Sys_error 。

参考这个链接。

于 2012-09-15T13:36:53.140 回答
2

Pervasives 的操作系统功能大致对应于您在标准 C 中可以执行的操作。在标准 C 中没有将文件截断为指定长度的功能,您所能做的就是在打开文件时将文件截断为空(通过Open_trunc国旗)。在 Unix/POSIX ( ) 中有一个,所以在moduletruncate中寻找它,它确实有一个函数(或者对于一个打开的文件,再次在Unix/POSIX之后)。Unixtruncateftruncate

于 2012-09-15T13:37:35.703 回答