2

我的问题是:

我需要编写一个压缩一个文件的应用程序。

应用程序成功地从用户定义的位置读取文件,但问题是,我无法将存档文件名写入指定文件夹而不会出现烦人的错误:"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

我不能肯定地说,但看起来你试图打开同一个文件两次——第一次是你打电话的时候"myStream = saveFileDialog1.OpenFile()) != null"

,当你打电话时"archiver.OpenArchive (System.IO.FileMode.Create);"

我建议您在开始存档操作之前关闭 myStream 。

于 2012-12-09T17:49:08.977 回答
1

考虑到它在您打开文件两次时出现,为什么不在第二次打开它之前调用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 回答