Haskell的openFile
在来源中有以下提示:
-- we want to truncate() if this is an open in WriteMode, but only
-- if the target is a RegularFile. ftruncate() fails on special files
-- like /dev/null.
when (iomode == WriteMode && fd_type == RegularFile) $
setSize fD 0
这非常令人惊讶,我认为IOMode
只是O_WRONLY
,O_RDONLY
和O_RDWR
的包装。为什么会这样呢?一个人如何打开文件而只写而不截断?
答案 0 :(得分:4)
我认为IOMode
的设计类似于mode
函数中的fopen
参数。
来自man fopen
:
w-将文件截断为零长度或创建要写入的文本文件。流位于文件的开头。
如果您想打开一个仅用于写入的文件(不截断文件),则通常要附加它。因此,只需使用AppendMode
。如果您不想在文件末尾放置位置(通常也不想在文件开始处放置位置),则可以使用hSeek
进行更改。
答案 1 :(得分:1)
IO模式AppendMode
或ReadWriteMode
应该打开文件以进行写入而不会截断。