无法写入输入到进程C#单声道

无法写入输入到进程C#单声道

问题描述:

我有一个问题,试图写入输入到Linux进程。下面的代码有云:无法写入输入到进程C#单声道

 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: Write fault on path /home/vinholi/Ubuntu One/Uso do linux em flash drives/Programa gerador de .deb/GeradorDeb/GeradorDeb/bin/Debug/[Unknown] at 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

+0

您的堆栈跟踪与您发布的代码无关。为什么? – 2013-03-14 00:48:15

+0

对不起柯克沃尔,但我不明白你的意思。请考虑到我是初学者。 – 2013-03-14 01:17:48

+0

我只是说你的堆栈跟踪不包含任何你的代码。 – 2013-03-14 02:21:31

您尝试写太多的路径不能太写入。 “/ home/vinholi/Ubuntu One /使用Linux em闪存驱动器/ Programa gerador de .deb/GeradorDeb/GeradorDeb/bin/Debug /”

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

  1. 它不是只读的。
  2. 它只读只读。
  3. USB驱动器没有空间不足。
+0

这并没有真正回答他的问题。 – 2013-03-14 17:12:13

对此错误的一种可能的解释是在您尝试写入该进程之前该进程退出。我试过/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>)上的应用。

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

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

这就是我所遇到的问题 - 即使在设置了其他答案中所述的WorkingDirectory之后。在你的相同情况下:C#,Mono,Ubuntu。

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