2

私の問題は:

1 つのファイルを圧縮するアプリケーションを作成する必要があります。

アプリケーションはユーザー定義の場所からファイルを正常に読み取りますが、問題は、アーカイブ ファイル名を指定されたフォルダーに書き込むことができず、迷惑なエラーが発生することです: "The process cannot access the file 'C:\Users\bg\Desktop\1323.zip「別のプロセスで使用されているためです。」次の行で: archiver.OpenArchive ( System.IO.FileMode.Create);

ここに私のCシャープコードがあります:

private void zipThatFileToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Stream myStream;
        SaveFileDialog saveFileDialog1 = new SaveFileDialog();

        saveFileDialog1.Filter = "zip files (*.zip)|*.zip|All files (*.*)|*.*";
        saveFileDialog1.FilterIndex = 1;
        saveFileDialog1.RestoreDirectory = true;

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if ((myStream = saveFileDialog1.OpenFile()) != null)
            {
                ZipForge archiver = new ZipForge();

                // The name of the ZIP file to be create
                string env = saveFileDialog1.FileName;
                //MessageBox.Show(env);

                //this doesn't work
                archiver.FileName = env;

                //this works
                //archiver.FileName = @"D:\test.zip";

                // Specify FileMode.Create to create a new ZIP file
                // or FileMode.Open to open an existing archive


                archiver.OpenArchive (System.IO.FileMode.Create);
                // Default path for all operations             
                archiver.BaseDir = @"C:\Users\bg\Desktop\";
                // Add file C:\file.txt the archive; wildcards can be used as well
                archiver.AddFiles(openFileDialog1.FileName);
                // Close archive
                archiver.CloseArchive();
                MessageBox.Show("The archive was created! ");
                myStream.Close();
            }
        }

私はこのhttp://www.componentace.com/zip-file-in-c-sharp.htmをこのhttp://www.componentace.com/zip-file-in-c-sharp.htmと一緒に使用しています

4

3 に答える 3

2

はっきりとは言えませんが、同じファイルを2回開こうとしているように見えます。"myStream = saveFileDialog1.OpenFile()) != null"

、そしてまたあなたが電話するとき"archiver.OpenArchive (System.IO.FileMode.Create);"

アーカイブ操作を開始する前に、myStreamを閉じることをお勧めします。

于 2012-12-09T17:49:08.977 に答える
1

ファイルを2回開いているときに表示されることを考えると、2回目に開く前にmyStream.Close()を呼び出してはどうでしょうか。

于 2012-12-09T17:50:55.993 に答える
1

これまで使用ZipForgeしたことはありませんが、おそらくファイルアクセスオプションが原因で問題が発生していると言えます。方法を見てくださいFile.Open()

public static FileStream Open(
    string path,
    FileMode mode,
    FileAccess access,
    FileShare share
)

ファイルへの読み取り、書き込み、または読み取り/書き込みアクセスの定数を定義します。

于 2012-12-09T17:59:09.653 に答える