无法写入输入到进程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
您尝试写太多的路径不能太写入。 “/ home/vinholi/Ubuntu One /使用Linux em闪存驱动器/ Programa gerador de .deb/GeradorDeb/GeradorDeb/bin/Debug /”
看起来像它的USB驱动器。检查以下内容:
- 它不是只读的。
- 它只读只读。
- USB驱动器没有空间不足。
这并没有真正回答他的问题。 – 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读取输入。
您的堆栈跟踪与您发布的代码无关。为什么? – 2013-03-14 00:48:15
对不起柯克沃尔,但我不明白你的意思。请考虑到我是初学者。 – 2013-03-14 01:17:48
我只是说你的堆栈跟踪不包含任何你的代码。 – 2013-03-14 02:21:31