2

encryptFile ファイルで if ステートメントを true に変更すると、コードは期待どおりに機能します。しかし、画面にコンソールウィンドウが表示されますが、これは醜いです。false にすると、FileListName は空のアーカイブとして圧縮されます。なんで?

        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();
    }
4

2 に答える 2

1

ウィンドウを取り除くには、試してください

p.StartInfo.CreateNoWindow = true;
于 2009-08-15T10:47:12.547 に答える
1

p.WaitForExit()の後に電話する必要がありますp.Start()。ドキュメントを参照してください。

あなたが持っているときにそれが機能する理由if (true)は、ReadToEnd()とにかくプロセスが終了するまで呼び出しが効果的に待たなければならないからです。

于 2009-08-15T12:13:10.580 に答える