[英]Cannot write files from Lua in Scite on Windows 10?
在 Windows 10 上使用 Scite 4.1.3。
我尝试了以下 Lua 脚本:
function TestFile()
mycontent = "Hello World"
mytmpfilename = os.tmpname()
os.execute("echo aaaa > " .. mytmpfilename) -- create file explicitly;
mytmpfile = io.popen(mytmpfilename, "w") -- w+ crashes Scite in Windows!
mytmpfile:write(mycontent)
mytmpfile:close()
print("readall " .. mytmpfilename .. ": " .. io.popen(mytmpfilename, "r"):read("*a"))
end
如果我运行它,我会打印:
readall C:\Users\ME\AppData\Local\Temp\s8qk.m:
...这意味着 Lua 甚至无法读取此文件?! 而且,这个愚蠢的 Windows 资源管理器提示出现了:
最后, C:\Users\ME\AppData\Local\Temp\s8qk.m
的内容仍然只是aaaa
。
很明显, mytmpfile:write
部分静默失败,文件中没有写入任何新内容 - 写入文件的唯一内容是cmd.exe
通过os.execute
执行的echo aaaa > ...
所以我的问题是 - 如何在 Windows 上的 Scite 中使用 Lua 编写文件? 最好不要有那个愚蠢的“你想如何打开这个文件?” 提示出现?
呃,我想我明白了……
看,OP 示例使用io.popen
- 如果我们查看https://man7.org/linux/man-pages/man3/popen.3.html ,它会说:
popen, pclose - 进出进程的管道流
(强调我的)。
所以,基本上,如果在 Windows 下我尝试做io. p open(filename)
io. p open(filename)
,然后显然试图找到该文件类型的默认“打开程序”的进程......以及因此我在 OP 中显示的提示(因此,我永远无法阅读或以这种方式写入访问过的文件——或者更确切地说,未访问过的文件)。
然而,在 Lua 中编程:21.2 – 完整的 I/O 模型实际上使用io.open
(注意,进程没有p
); 然后文件似乎可以打开以进行读/写。
因此,来自 OP 的更正示例应该是:
function TestFile()
mycontent = "Hello World"
mytmpfilename = os.tmpname()
-- os.execute("echo aaaa > " .. mytmpfilename) -- create file explicitly; -- no need anymore, with io.open
mytmpfile = io.open(mytmpfilename, "w+") -- w+ crashes Scite in Windows, but only if using io.popen; is fine with io.open!
mytmpfile:write(mycontent)
mytmpfile:close()
print("readall " .. mytmpfilename .. ": " .. io.open(mytmpfilename, "r"):read("*a"))
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.