5

我在尝试将输入写入 linux 进程时遇到问题。代码如下:

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.WorkingDirectory = "'/home/"+user+"/pacotes/"+nome_pacote.Text+"-1.0/'";
        process.StartInfo.FileName="dh_make";
        process.StartInfo.Arguments="-n -s";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardInput = true;
        process.Start();
        Thread.Sleep(3000);
        process.StandardInput.WriteLine();

这是错误:

System.IO.IOException:路径 /home/vinholi/Ubuntu One/Uso do linux em flash drive/Programa gerador de .deb/GeradorDeb/GeradorDeb/bin/Debug/[Unknown] 在 System.IO.FileStream.FlushBuffer 上出现写入错误(System.IO.Stream st) [0x00000] in :0 at System.IO.FileStream.FlushBuffer () [0x00000] in :0 at System.IO.FileStream.Dispose (Boolean disposing) [0x00000] in :0

4

4 回答 4

3

对此错误的一种可能解释是进程在您尝试写入之前已退出。我试过这个/bin/date和一个合法StartInfo.WorkingDirectory的,程序集是/Workspace/export/misc/H.exe. 这产生:

Unhandled Exception:
System.IO.IOException: Write fault on path /Workspace/export/misc/[Unknown]
  at System.IO.FileStream.WriteInternal (System.Byte[] src, Int32 offset, Int32 count) [0x00097] in /Workspace/mono/mcs/class/corlib/System.IO/FileStream.cs:658 
  at System.IO.FileStream.Write (System.Byte[] array, Int32 offset, Int32 count) [0x000aa] in /Workspace/mono/mcs/class/corlib/System.IO/FileStream.cs:634 
  at System.IO.StreamWriter.FlushBytes () [0x00043] in /Workspace/mono/mcs/class/corlib/System.IO/StreamWriter.cs:222 
  at System.IO.StreamWriter.FlushCore () [0x00012] in /Workspace/mono/mcs/class/corlib/System.IO/StreamWriter.cs:203 
  at System.IO.StreamWriter.Write (System.Char[] buffer) [0x00022] in /Workspace/mono/mcs/class/corlib/System.IO/StreamWriter.cs:351 
  at System.IO.TextWriter.WriteLine () [0x00000] in /Workspace/mono/mcs/class/corlib/System.IO/TextWriter.cs:257 
  at X.Main () [0x00066] in /Workspace/export/misc/H.cs:17 

每次在process.StartInfo.WorkingDirectory. 尽管错误消息应该更清楚,但对此无能为力。

由于引号,您的目录无效。您也不应该像以前那样连接路径名,因为这会使您的应用程序无法移植到非 Unix 操作系统。相反,将其写为:

var home = Environment.GetFolderPath (Environment.SpecialFolder.UserProfile);
process.StartInfo.WorkingDirectory = Path.Combine (home, "pacotes", nome_pacote.Text+"-1.0");

使用Environment.GetFolderPath()可以更轻松地在 Mac 上运行您的应用程序(主目录位于/Users/<username>而不是/home/<username>)。

于 2013-03-14T17:36:21.387 回答
0

另一种可能性是您启动的二进制文件是一个悬空符号链接。检查二进制文件是否存在或者是指向有效二进制文件的符号链接。

于 2015-07-25T06:42:37.557 回答
0

正如另一个回复所说:“对此错误的一个可能解释是进程在您尝试写入之前退出。”

这就是我遇到的问题——即使在按照另一个答案中的描述设置了 WorkingDirectory 之后。在你同样的情况下:C#、Mono、Ubuntu。

最终,在我的情况下,解决方案是设置参数,以便进程不退出,并且真的试图从 StandardInput 读取输入。

于 2017-06-24T11:12:24.083 回答
-2

你试图写的路径也不能写。" /home/vinholi/Ubuntu One/Uso do linux em flash drive/Programa gerador de .deb/GeradorDeb/GeradorDeb/bin/Debug/"

看起来像一个USB驱动器。检查以下内容:

  1. 它不是只读的。
  2. 它不是以只读方式安装的。
  3. USB 驱动器没有空间不足。
于 2013-03-14T07:06:43.373 回答