我每隔几秒钟创建几个备份文件,以确保系统的完整性(要求)。
因为它有很多文件,所以我使用ZipOutputStream压缩文件,并在磁盘上节省一些空间。但是,当代码到达File.OpenRead(文件名)时,它会抛出以下异常:
进程无法访问文件“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);发布于 2016-07-22 01:33:40
您需要将源文件(文件名)的路径传递给File.OpenRead方法,而不是目标路径。由于您正在尝试读取已打开要写入的目标文件,因此会出现访问被拒绝错误。
string sourceFileName = filename;
string destFileName = string.Format("{0}.his", filename);
using (ZipOutputStream s = new ZipOutputStream(File.Create(destFileName)) {
s.SetLevel(9); // 0 - store only to 9 - means best compression
ZipEntry entry = new ZipEntry(filename);
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(sourceFileName)) {
byte[] buffer = new byte[4096];
StreamUtils.Copy(fs, s, buffer);
}
s.Close();
}
File.Delete(filename);https://stackoverflow.com/questions/38510380
复制相似问题