为什么io:write()不将内容写入输出文件?

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

除了文件实际上并没有被写入之外,一切都像它应该做的那样。我的Lua解释器(用Pelles-C自行编译)没有抛出任何错误或异常退出;脚本完成时好像它是工作的。

起初我没有使用i:flush(),但在阅读了它应该将任何写入的数据保存到文件(请参阅LUA docs)之后,我添加了它。它没有改变任何事情,文件仍然没有被写入。

我_认为_可能是因为我打开文件进行编辑的方式有关,因为"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”。行号在for y in i:lines() do行,但我不知道为什么它在那里中断。我注意到file:lines()将在文件本身没有任何内容时中断并给出奇怪/无意义的错误,但我的文本文件中有一些东西。

编辑1

我尝试在我的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

以查看是否可以强制其写入常规文本。它_确实_,但然后它会崩溃,显示No error,并仍然不写入替换字符串(仅为TESTESTTEST)。我不知道问题可能是什么。

点赞
用户1847592
用户1847592

我猜,在遍历文件行时无法向文件写入内容。

for y in i:lines() do
   i:write(p)
   i:flush()
end
2013-03-06 20:54:23