2009-08-15 17 views
2

encryptFileファイルでif文をtrueに変更すると、コードは期待どおりに動作します。しかし、私は醜い画面上にコンソールウィンドウを取得します。私がそれを偽のFileListNameにすると、空のアーカイブとして圧縮されます。どうして?7zファイルがフラッシュされます。そのファイルを圧縮していない

 using (TextWriter tw = (TextWriter)new StreamWriter(FileListName)) 
     { 
      writeFilename(tw, t, "."); 
      tw.Flush(); 
      tw.Close(); 
     } 
     encryptFile(FileListName, dst + Path.GetFileName(FileListName)+".7z", password, null); 




    void encryptFile(string srcFile, string dstFile, string pass, int? compressLevel) 
    { 
     string line; 
     var p = new Process(); 
     line = string.Format("a -t7z \"{0}\" \"{1}\" -mhe -p{2} ", dstFile, srcFile, pass); 
     if (compressLevel != null) 
      line += string.Format("-mx{0} ", compressLevel); 
     p.StartInfo.Arguments = line; 
     p.StartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe"; 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     if (false) 
     { 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.RedirectStandardError = true; 
      p.Start(); 

      var sr = p.StandardOutput; 
      var err = p.StandardError; 
      Console.Write(sr.ReadToEnd()); 
      Console.Write(err.ReadToEnd()); 
     } 
     else 
      p.Start(); 
    } 

答えて

1

ウィンドウを取り除くために、あなたはあなたがp.Start()p.WaitForExit()を呼び出す必要が

p.StartInfo.CreateNoWindow = true; 
1

を試してみてください。ドキュメントを参照してください:

あなたはif (true)を持っている場合、それは働く理由はReadToEnd()呼び出しが効果的にプロセスがとにかく終了したまで待つことを強制ということです。

+0

バーム、動作します。それは、特に私が(FileListName)をencryptFileの後に削除を書くときに、完璧な意味があります:) –

+0

クール、それはうれしい! :) – ars

関連する問題