首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ZipOutputStream和FileStream压缩文件时出现异常

使用ZipOutputStream和FileStream压缩文件时出现异常
EN

Stack Overflow用户
提问于 2016-07-22 01:09:24
回答 1查看 1K关注 0票数 1

我每隔几秒钟创建几个备份文件,以确保系统的完整性(要求)。

因为它有很多文件,所以我使用ZipOutputStream压缩文件,并在磁盘上节省一些空间。但是,当代码到达File.OpenRead(文件名)时,它会抛出以下异常:

进程无法访问文件“inputfilefullnamehere”,因为它正被另一个进程使用。

我以为它就是那个ZipOutputStream,所以我试着在打开FileStream之前关闭它,但是在StreamUtils.Copy()中我得到了另一个异常,说没有打开条目。

我是不是漏掉了什么?

我的代码是:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 01:33:40

您需要将源文件(文件名)的路径传递给File.OpenRead方法,而不是目标路径。由于您正在尝试读取已打开要写入的目标文件,因此会出现访问被拒绝错误。

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38510380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档