[英]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.