举个例子,我们使用file
函数的open
参数的默认值:
❯ R
> fh <- file("test.txt")
> writeLines("1", fh)
> writeLines("2", fh)
> close(fh)
> quit()
字符串
生成的文件只包含最后一行:
❯ cat test.txt
2
型
这似乎是一个错误的行为,我希望这两条线都存在。
现在以设置open="w"
为例:
❯ R
> fh <- file("test.txt","w")
> writeLines("1",fh)
> writeLines("2",fh)
> close(fh)
> quit()
型
现在这两行都写得正确:
❯ cat test.txt
1
2
型file
的文档说:
连接的模式是在实际打开时确定的,如果给定'open =“"',则延迟连接的模式。
所以看起来模式是由writeLines
设置的。它的文件说:
如果连接打开,则从其当前位置写入。如果未打开,则在“wt”模式下在呼叫期间打开,然后再次关闭。
文件中的文档说明wt
相当于w
:
'“w”“或'“wt”“打开以在文本模式下写入。
因此,既然这两种方式以相同的模式打开文件,我不明白为什么它们会给予不同的结果。
1条答案
按热度按时间xlpyo6sf1#
文件定义为
read
,初始文件打开。如果您进一步阅读文档,它指出大多数需要写访问或纯文本或纯二进制模式的操作将覆盖尚未打开的连接的默认模式。
因此,每次调用
writeLines()
时,都会临时覆盖初始的read
模式。在调用writeLines()
之前,该文件不会在CWD中打开。你打电话之后
字符串
有一个名为test.txt的文件包含
1
等你打完电话
型
另一个
writeLines()
被覆盖,文件现在包含2
。您可以运行此命令并查看CWD,并在每个
writeLines()
之后检查文本文件您可以运行此命令,并注意到
fh
始终处于read
模式型