File io 为什么';io:write()写入输出文件?

File io 为什么';io:write()写入输出文件?,file-io,lua,File Io,Lua,我正在用Lua编写一个简短的脚本来复制搜索/替换功能。目标是输入搜索项和替换项,它将梳理给定扩展名(尚未确定输入)的所有文件,并用替换项替换搜索项 一切似乎都在做它应该做的,除了文件没有实际写入。我的Lua解释器(由我自己在Pelles-C中编译)不会抛出任何错误或异常退出;脚本完成时就好像它工作了一样 起初我没有I:flush(),但我在读取后添加了它,它应该将任何写入的数据保存到文件中(请参阅)。它没有改变任何东西,文件仍然没有写入 我认为这可能与我如何打开文件进行编辑有关,因为“w”选项起

我正在用Lua编写一个简短的脚本来复制搜索/替换功能。目标是输入搜索项和替换项,它将梳理给定扩展名(尚未确定输入)的所有文件,并用替换项替换搜索项

一切似乎都在做它应该做的,除了文件没有实际写入。我的Lua解释器(由我自己在Pelles-C中编译)不会抛出任何错误或异常退出;脚本完成时就好像它工作了一样

起初我没有I:flush(),但我在读取后添加了它,它应该将任何写入的数据保存到文件中(请参阅)。它没有改变任何东西,文件仍然没有写入

我认为这可能与我如何打开文件进行编辑有关,因为“w”选项起作用(但会覆盖测试文件中的所有内容)

来源:

io.write("Enter your search term:")
term = io.read()

io.write("Enter your replace term:")
replacement = io.read()

io.stdin:read()

t = {}
for z in io.popen('dir /b /a-d'):lines() do

    if string.match(string.lower(z), "%.txt$")  then
        print(z)
        table.insert(t, z)
    end
end
print("Second loop")

for _, w in pairs(t) do
    print(w)
    i = io.open(w, "r+")
    print(i)

    --i:seek("set", 6)
    --i:write("cheese")
    --i:flush()
    for y in i:lines() do
        print(y)
        p, count = string.gsub(y, term, replacement, 1)
        print(p)

        i:write(p)

        i:flush()
        io.stdin:read()
    end
    i:close()
end
这是我得到的输出(这是我想要的),但实际上并没有写入文件:

曾经有一次,它将输出写入一个文件,但它只将输出写入一个文件,之后,写入我的脚本崩溃,并显示以下消息:
No error
。行号在i:lines()do行中y的
处,但我不知道它为什么会在那里断开。我注意到
file:lines()
如果文件本身没有任何内容并出现奇怪/胡言乱语的错误,就会中断,但我的文本文件中有一些内容

Edit1

我尝试在for循环中执行此操作:

for y in i:lines() do
        print(y)
        p, count = string.gsub(y, term, replacement, 1)
        print(p)

        i:write(p)
        i:seek("set", 3)        --New
        i:write("TESTESTTEST")  --New
        i:flush()
        io.stdin:read()
end

为了看我是否能强迫它写常规文本。它确实这样做了,但是它崩溃了,没有错误,仍然没有写入替换字符串(只是TESTESTTEST)。我不知道可能是什么问题。

我想,在遍历文件行时,不能写入文件

for y in i:lines() do
   i:write(p)
   i:flush()
end

我想你是对的。将i:write(p)行移出循环似乎可以让它写入文件。除非发生其他事情,否则我会把这个标记为正确的。谢谢