关于把文件夹打包成zip包

时间:2021-12-07 09:38:37
想做一个把文件夹,包括文件夹内的子文件打成zip包的功能,在网上找了个例子
 
private void button2_Click(object sender, EventArgs e)
        {
            ZipFile(@"d:\file\", @"d:\file\a.zip");
        }

        public void ZipFile(string strFile, string strZip)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
                strFile += Path.DirectorySeparatorChar;
            ZipOutputStream s = new ZipOutputStream(File.Create(strZip));
            s.SetLevel(6); // 0 - store only to 9 - means best compression
            zip(strFile, s, strFile);
            s.Finish();
            s.Close();
        }

        private void zip(string strFile, ZipOutputStream s, string staticFile)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar;
            Crc32 crc = new Crc32();
            string[] filenames = Directory.GetFileSystemEntries(strFile);
            foreach (string file in filenames)
            {

                if (Directory.Exists(file))
                {
                    zip(file, s, staticFile);
                }

                else // 否则直接压缩文件
                {
                    //打开压缩文件
                    FileStream fs = File.OpenRead(file);

                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
                    ZipEntry entry = new ZipEntry(tempfile);

                    entry.DateTime = DateTime.Now;
                    entry.Size = fs.Length;
                    fs.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    s.PutNextEntry(entry);

                    s.Write(buffer, 0, buffer.Length);
                }
            }
        }


======================================
代码走到这里的时候
FileStream fs = File.OpenRead(file);
到这里的时候老是说
文件“d:\file\a.zip”正由另一进程使用,因此该进程无法访问此文件。

请问各位是什么原因?

3 个解决方案

#1


这个文件正在被使用,是不是有打开?或者上面的代码有打开过这个文件没关闭。
如果都没有,那你注销或重启下你的电脑,然后再跑一下这段代码。

或者你加个try-catch,避免你open之后没有close

#2


从你的代码上看没有占用文件的行为,怀疑确实是其它进程占用的,你手动操作一下这个文件试试,比如重命名,如果真的被占用就不是程序的问题了。

#3


ZipFile(@"d:\file\", @"d:\file\a.zip");

你把后面的换个别的路径,这样会生成出来,你再打开打不开

#1


这个文件正在被使用,是不是有打开?或者上面的代码有打开过这个文件没关闭。
如果都没有,那你注销或重启下你的电脑,然后再跑一下这段代码。

或者你加个try-catch,避免你open之后没有close

#2


从你的代码上看没有占用文件的行为,怀疑确实是其它进程占用的,你手动操作一下这个文件试试,比如重命名,如果真的被占用就不是程序的问题了。

#3


ZipFile(@"d:\file\", @"d:\file\a.zip");

你把后面的换个别的路径,这样会生成出来,你再打开打不开