R文件函数:open的默认值实际上是做什么的?

epggiuax  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(107)

举个例子,我们使用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”“打开以在文本模式下写入。
因此,既然这两种方式以相同的模式打开文件,我不明白为什么它们会给予不同的结果。

xlpyo6sf

xlpyo6sf1#

文件定义为read,初始文件打开。如果您进一步阅读文档,它指出
大多数需要写访问或纯文本或纯二进制模式的操作将覆盖尚未打开的连接的默认模式。
因此,每次调用writeLines()时,都会临时覆盖初始的read模式。在调用writeLines()之前,该文件不会在CWD中打开。
你打电话之后

> writeLines("1", fh)

字符串
有一个名为test.txt的文件包含1
等你打完电话

> writeLines("2", fh)


另一个writeLines()被覆盖,文件现在包含2
您可以运行此命令并查看CWD,并在每个writeLines()之后检查文本文件
您可以运行此命令,并注意到fh始终处于read模式

fh <- file("c:/data/test.txt")
writeLines("1", fh)
# check contents of test.txt
writeLines("2", fh)
# check contents of test.txt
stringy <- readLines(fh)
print(stringy)

相关问题