打开文件的模式字符串w+

4

我知道io.open(file, "w")的作用是写入文件。但是我遇到了io.open(file, "w+"),不知道"w+"的作用是什么?


我有同样的问题 - 为什么Lua有三种写入模式:“写入”、“追加”和“写入+”? - NULL pointer
3个回答

7

io.open只是使用了C语言的fopen函数。您可以查看C语言中fopen的手册

  • w:将文件截断为零长度或创建用于写入的文本文件。流定位在文件开头。
  • w+:与w相同,除了返回的句柄可用于读取。

非常感谢,这是最好的解释。 - Dmitriy

1

来自参考手册io.open

mode字符串可以是以下任何一种:

  • "r":读取模式(默认);
  • "w":写入模式;
  • "a":附加模式;
  • "r+":更新模式,所有先前的数据都将被保留;
  • "w+":更新模式,所有先前的数据都将被清除;
  • "a+":追加更新模式,之前的数据被保留,仅允许在文件末尾进行写入。

更新模式指的是可以在关联文件上执行输入和输出。


这并不回答问题——我认为这是一个合理的问题。在大多数编程语言中,写入文件有两种变体——“附加”将额外的内容放在现有文件的末尾,“写入”则会清空现有文件内容,并从字节号0开始写入。我读了手册的这一部分,转而来这里寻求澄清。 - NULL pointer
@NULLpointer 大多数编程语言都支持各种模式,至少在 C / Python / Ruby / Lua 中都可以找到这些模式。而一些其他的编程语言则以某种封装的方式隐式地支持所有这些模式,就像 C++ / Java 一样。 - Yu Hao
好了!您的编辑添加了缺失的关键信息 - 输入和输出都可以使用w+执行。 - NULL pointer

0

我在运行于OpenWRT上的Lua 5.1中进行了测试,发现

file=io.open("/usr/share/result","w")

是相同的

file=io.open("/usr/share/result","w+")

这两个操作都会清空文件的当前内容并重新写入。

当我尝试时

file=io.open("/usr/share/result","a")

文件被追加了 - 每次我的代码运行时它都变得越来越长。

所以我认为没有区别。


这个答案是错误的。写入模式更新模式之间的区别在于:使用"w"模式,您只能将输出写入文件,而使用"w+"模式,则可以执行输入和输出两种操作。 - Yu Hao
顺便提一下,你真的认为语言设计者(不仅是Lua,还包括C/Python/Ruby等)会保留"w""w+"如果它们真的是相同的吗? - Yu Hao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接