【发布时间】:2016-07-21 17:09:24
【问题描述】:
我每隔几秒钟创建几个备份文件,以确保我的系统的完整性(要求)。
因为文件很多,所以我使用 ZipOutputStream 压缩文件并节省一些磁盘空间。但是,当代码到达 File.OpenRead(filename) 时,会抛出以下异常:
该进程无法访问文件“inputfilefullnamehere”,因为它正被另一个进程使用。
我认为这正是 ZipOutputStream,所以我尝试在打开 FileStream 之前关闭它,但随后我在 StreamUtils.Copy() 中遇到另一个异常,说没有打开任何条目。
我有什么遗漏的吗?
我的代码是:
byte[] buffer = new byte[4096];
ZipOutputStream s = new ZipOutputStream(File.Create(filename+ ".his"));
s.SetLevel(9); // 0 - store only to 9 - means best compression
ZipEntry entry = new ZipEntry(filename+ ".his");
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(filename+ ".his"))
{
StreamUtils.Copy(fs, s, buffer);
}
s.Close();
File.Delete(filename);
【问题讨论】:
-
您的 zip 文件的名称不应该与您正在压缩的文件的名称不同,例如
filename + ".his.zip"? -
代码的第二行,你打开一个文件,但从不关闭它。然后你尝试再次打开它。繁荣。我会整理一个答案,但试图猜测容易出错的文件名的意图是很棘手的。
-
什么是 ZipOutputStream 类?在 .NET 中找不到它。
-
@spender 我不是写这段代码的人,我只是负责解决问题的人。我和你一样困惑。但我同意这个问题取决于创建文件而不是关闭它,尽管如果我也在压缩它,我真的不知道什么时候这样做。
-
@mehrzad 它是 ICSharpCode.SharpZipLib 库的一部分 github.com/icsharpcode/SharpZipLib/wiki/Zip-Samples