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
如果都没有,那你注销或重启下你的电脑,然后再跑一下这段代码。
或者你加个try-catch,避免你open之后没有close
#2
从你的代码上看没有占用文件的行为,怀疑确实是其它进程占用的,你手动操作一下这个文件试试,比如重命名,如果真的被占用就不是程序的问题了。
#3
ZipFile(@"d:\file\", @"d:\file\a.zip");
你把后面的换个别的路径,这样会生成出来,你再打开打不开
你把后面的换个别的路径,这样会生成出来,你再打开打不开
#1
这个文件正在被使用,是不是有打开?或者上面的代码有打开过这个文件没关闭。
如果都没有,那你注销或重启下你的电脑,然后再跑一下这段代码。
或者你加个try-catch,避免你open之后没有close
如果都没有,那你注销或重启下你的电脑,然后再跑一下这段代码。
或者你加个try-catch,避免你open之后没有close
#2
从你的代码上看没有占用文件的行为,怀疑确实是其它进程占用的,你手动操作一下这个文件试试,比如重命名,如果真的被占用就不是程序的问题了。
#3
ZipFile(@"d:\file\", @"d:\file\a.zip");
你把后面的换个别的路径,这样会生成出来,你再打开打不开
你把后面的换个别的路径,这样会生成出来,你再打开打不开