簡體   English   中英

無法在 Windows 10 上的 Scite 中從 Lua 寫入文件?

[英]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 資源管理器提示出現了:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM