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:System.IO.FileStream.FlushBufferのパス/ home / vinholi / Ubuntu One / Uso do linux em flash drive / Programa gerador de .deb / GeradorDeb / GeradorDeb / bin / Debug/[Unknown]に障害を書き込みます。 (System.IO.Stream st)[0x00000] in:0 at System.IO.FileStream.FlushBuffer()[0x00000] in:0 at System.IO.FileStream.Dispose(ブール処理)[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

もう 1 つの可能性は、起動しているバイナリがダングリング シンボリック リンクであるということです。バイナリが存在するかどうか、または有効なバイナリを指すシンボリック リンクであるかどうかを確認します。

于 2015-07-25T06:42:37.557 に答える
-2

あなたが書き込もうとしているパスも書き込めません。" /home/vinholi/Ubuntu One/Uso do linux em flash drives/Programa gerador de .deb/GeradorDeb/GeradorDeb/bin/Debug/"

USBドライブのようです。以下を確認してください。

  1. 読み取り専用ではありません。
  2. 読み取り専用でマウントされていません。
  3. USB ドライブの容量が不足していません。
于 2013-03-14T07:06:43.373 に答える