gpt4 book ai didi

javascript - 如何在 Firefox 插件中使用 JavaScript 访问命名管道?

转载 作者:行者123 更新时间:2023-11-28 10:55:53 25 4
gpt4 key购买 nike

我正在尝试访问 Firefox 附加组件中的命名管道。我的代码,基于解决方案 2 this CodeProject 的问题是:

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("\\\\.\\pipe\\test");
var text = "Some text to be written";
var writer = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
// Open file for read/write access, and create it if it does not exist.
writer.init (file, 0x04 | 0x08, -1, 0);
writer.write (text, text.length);
writer.flush ();
writer.close ();

当我运行 Firefox Scratchpad 时,我得到:

/*
Exception: Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsIFileOutputStream.init]
@6
*/

第 6 行是我调用 writer.init 的行。

我尝试过将不同的标志传递给 writer.init,但没有运气。我可以使用此代码写入普通文件路径,但不能写入命名管道路径。

我一天的大部分时间都在寻找更多信息。我发现的唯一相关的东西是 this Bugzilla bug 提到了同样的问题,但日期是 2009 年。

预先感谢您的任何建议。

编辑:根据回复,我尝试了以下操作:

var encoder = new TextEncoder();
var array = encoder.encode("This is some text");
var path = "\\\\.\\pipe\\test";
Task.spawn(function() {
let pfh = yield OS.File.open(path, {write: true});
yield pfh.write(array);
yield pfh.close();
});

它允许我写入文件(如果我相应地更改路径),但似乎不会向管道发送任何内容。

这是我用来读取 .NET 端管道的(诚然很粗糙)代码:

let server = new NamedPipeServerStream ("\\\\.\\pipe\\test", PipeDirection.InOut)
let reader = new StreamReader (server)
do
printfn "Listening..."
server.WaitForConnection ()
printfn "Connected."
while true do
while reader.EndOfStream = false do reader.ReadLine () |> printfn "%s"

以及我编写的代码,以验证我至少可以写入 .NET 中的管道:

let client = new NamedPipeClientStream ("\\\\.\\pipe\\test")
do client.Connect ()
let writer = new StreamWriter (client)
do writer.AutoFlush <- true

// Wait for connection
System.Threading.Thread.Sleep (1000)
let message = "hello"
do message |> writer.WriteLine

最佳答案

尝试操作系统文件:

let encoder = new TextEncoder();                                   // This encoder can be reused for several writes
let array = encoder.encode("This is some text"); // Convert the text to an array
let promise = OS.File.writeAtomic("\\\\.\\pipe\\test", array, // Write the array atomically to "file.txt", using as temporary
{tmpPath: "file.txt.tmp"}); // buffer "file.txt.tmp".

关于javascript - 如何在 Firefox 插件中使用 JavaScript 访问命名管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com