首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用nunrar解压压缩文件后将其删除

使用nunrar解压压缩文件后将其删除
EN

Stack Overflow用户
提问于 2013-07-04 18:28:09
回答 2查看 1.3K关注 0票数 0

我使用lib Nunrar site解压了一个.rar文件:

代码语言:javascript
复制
RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);

解压工作正常,但在此提取操作后,我不能删除原始压缩文件

代码语言:javascript
复制
System.IO.File.Delete(path);

由于该文件由另一个进程使用,因此使用了hole函数:

代码语言:javascript
复制
 try
           {
               FileStream fs = File.OpenRead(path);
               if(path.Contains(".rar")){

                   try
                   {
                       RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);
                       fs.Close();

                   }
                   catch { }

                   }

           catch { return; }
           finally
           {
               if (zf != null)
               {
                   zf.IsStreamOwner = true; // Makes close also shut the underlying stream
                   zf.Close(); // Ensure we release resources
               }
           }
           try
           {
               System.IO.File.Delete(path);
           }
           catch { }

那么我可以在解压后删除压缩文件吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-04 18:52:13

我不知道zf是什么,但您也可以将它包装在using语句中。尝试将您的FileStream fs部件替换为以下内容

代码语言:javascript
复制
using( FileStream fs = File.OpenRead(path))
{
    if(path.Contains(".rar"))
    {
        try
        {
           RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);
        }
        catch { }
     }
}

这样,即使path不包含.rar,也会关闭fs。只有在文件名中存在rar时,才会关闭fs

另外,这个库有自己的流处理吗?它可能有一个关闭它的方法。

票数 1
EN

Stack Overflow用户

发布于 2018-10-17 03:33:35

我在nunrar上也遇到了这个问题,nether close()或using语句似乎可以解决这个问题。不幸的是,文档很少,所以我现在使用SharpCompress library它是nunrar库的一个分支,在SharpCompress上的according to the devs of nunrar.The文档也很少(但更少),所以我的方法是:

代码语言:javascript
复制
private static bool unrar(string filename)
{
    bool error = false;
    string outputpath = Path.GetDirectoryName(filename);

    try
    {
        using (Stream stream = File.OpenRead(filename))
        {
            var reader = ReaderFactory.Open(stream);
            while (reader.MoveToNextEntry())
            {
                if (!reader.Entry.IsDirectory)
                {
                    Console.WriteLine(reader.Entry.Key);
                    reader.WriteEntryToDirectory(outputpath, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
                }
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Failed: " + e.Message);
        error = true;
    }

    if (!error)
    {
        File.Delete(filename);
    }
    return error;
}

将以下库添加到顶部

代码语言:javascript
复制
using SharpCompress.Common;
using SharpCompress.Readers;

使用nuget.This方法安装适用于SharpCompress v0.22.0(撰写本文时的最新版本)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17467951

复制
相关文章

相似问题

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