标签: sharpcompress

使用 SharpCompress 识别与给定 RAR 存档关联的卷

长话短说

该网站主页上给出的示例代码无法编译。如何列出多部分 RAR 文件中的所有卷?

问题定义

我有一个 Windows 10 文件夹,其中包含许多多部分 RAR 文件。“根”rar 及其部分需要隔离,然后移至各自的文件夹中。我可以通过创建一个文件夹并检查文件名来手动执行此操作,以便根 rar 和“part01.rar”、“part02.rar”等都位于同一目录中。

当有几十个多部分文件时,手动过程很乏味,所以我正在编写一个 C# 应用程序。到目前为止,我了解到这些多部分 RAR 文件的命名约定并不一致,这让我陷入了尴尬的境地:检查它们的文件名并通过字符串操作推断它们所属的位置。不酷。

所以我导入SharpCompress是为了科学、准确地获取文件名。其文档页面上有一个示例,它似乎完全符合我的要求。我已经围绕它包装了一个方法,现在将其作为“我尝试过的”呈现给您。

private static void GetFileNames(FileInfo rarFileInfo)
{
    var archive = ArchiveFactory.Open(rarFileInfo.FullName);
    foreach (var entry in archive.Entries)
    {
        if (!entry.IsDirectory)
        {
            Console.WriteLine(entry.FilePath);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...并注意 VS 生成的红色文本...

在此输入图像描述

它无法编译,因为无法解析“FilePath”!我是否使用了错误的框架?我在VS2013下使用.NET 4.5。从理论上讲,这里应该已经有很多问题,因为主站点上的文档示例无法编译,但实际上没有(我检查过)。

问题:如何使用 SharpCompress 来识别与给定 RAR 关联的所有卷,以便开发人员可以使用它们的名称。


注意:我还可以使用 WinRar API 将文件解压到它们自己的目录中,但这不是客户端想要的。 我稍后将实际解压它们,目的是将所有关联的卷放在各自的文件夹中。

.net c# sharpcompress

5
推荐指数
1
解决办法
2811
查看次数

如何使用 Sharpcompress 解压 .xz (lzma2) 文件

我已经下载了 SharpCompress 源代码并创建了一个简单的控制台应用程序来解压缩一个小 .xz 文件。按照 github 网站上的几个不同示例以及 stackoverflow 上的其他示例,我找不到任何实际适用于“解压缩”.xz 文件的组合,也找不到任何说明或文档。有人真的能够使用 SharpCompress 来“解压缩”.xz 文件吗?

        using (Stream stream = File.OpenRead(@"C:\temp\ot.xz"))
        {
            using (var reader = ReaderFactory.Open(stream))
            {
                while (reader.MoveToNextEntry())
                {
                    if (!reader.Entry.IsDirectory)
                    {
                        Console.WriteLine(reader.Entry.Key);
                        reader.WriteEntryToDirectory(@"C:\temp", new ExtractionOptions()
                        {
                            ExtractFullPath = true,
                            Overwrite = true
                        });
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

此特定代码引发异常“无法确定压缩流类型”。支持的阅读器格式:Zip、GZip、BZip2、Tar、Rar、LZip、XZ'

以下代码效果更好(不会引发错误),但 Entry.Key 值是意外的或乱码。

        using (Stream stream = File.OpenRead(@"C:\temp\ot.xz"))
        {
            var xzStream = new XZStream(stream);
            using (var reader = TarReader.Open(xzStream))// ReaderFactory.Open(stream))
            {
                while (reader.MoveToNextEntry())
                {
                    if (!reader.Entry.IsDirectory)
                    {
                        Console.WriteLine(reader.Entry.Key);
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

.net c# xz sharpcompress

4
推荐指数
1
解决办法
3428
查看次数

SharpCompress&LZMA2 7z存档-提取特定文件的速度非常慢。为什么?备择方案?

我有一个使用LZMA2压缩(压缩级别:超)的7zip存档。该档案文件包含1,749个文件,最初的总大小为661mb。压缩文件的大小为39mb。

现在,我正在尝试使用C#从此存档中提取一个很小的文件(大约200kb)。

我从IArchive(工作速度相对较快)中获取了相应的IArchiveEntry,但是随后调用IArchiveEntry.WriteToFile(targetPath)大约需要33秒!同样,如果我改为写入内存流,时间也很长。(编辑:当我在压缩级别=正常的7z LZMA2存档上运行此文件时,它仍需要9秒钟)

当我在实际的7zip应用程序中打开相同的存档并从那里提取相同的文件时,它只需要2-3秒。我怀疑这是多核(7zip)与单核(可能是ShapCompress吗?),但是我没有注意到7zip解压缩期间的CPU使用率激增。.也许它太快了,以至于无法注意到。

有人知道SharpCompress这么慢的速度可能是什么问题吗?我可能会缺少某些设置或使用了错误的工厂(ArchiveFactory)吗?

如果不是-是否有任何C#库在解压缩该库时可能会更快?

作为参考,这是我如何使用SharpCompress提取的草图:

private void Extract()
    {
        using(var archive = GetArchive())
        {
          var entryPath = /* ... path to entry .. */
          var entry = TryGetEntry(archive, entryPath);
          entry.WriteToFile(some_target_path);
        }
    }


    private IArchive GetArchive()
    {
        string path = /* .. path to my .7z file */;
        return ArchiveFactory.Open(path);
    }

    private IArchiveEntry TryGetEntry(IArchive archive, string path)
    {
        path = path.Replace("\\", "/");

        foreach (var entry in archive.Entries)
        {
            if (!entry.IsDirectory)
            {
                if (entry.Key == path)
                    return entry;
            } …
Run Code Online (Sandbox Code Playgroud)

c# compression performance lzma sharpcompress

3
推荐指数
1
解决办法
1272
查看次数

使用sharpcompress创建一个7zip存档

我需要使用SharpCompress将文件压缩为7zip:http://sharpcompress.codeplex.com

我做了如下:

using (var archive = ZipArchive.Create())
{
     archive.AddEntry("CompressionTest.pdb", new FileInfo("CompressionTest.pdb"));

     using (Stream newStream = File.Create("CompressionTest212.7z"))
     {
         archive.SaveTo(newStream, SharpCompress.Common.CompressionType.LZMA);
     }
 }
Run Code Online (Sandbox Code Playgroud)

压缩过程成功完成.但是,无法使用7z(http://www.7-zip.org/download.html)或winrar提取压缩文件.

我不知道是否有人也遇到了同样的问题,并且知道如何解决它?

提前致谢.

c# 7zip sharpcompress

1
推荐指数
1
解决办法
5264
查看次数

标签 统计

c# ×4

sharpcompress ×4

.net ×2

7zip ×1

compression ×1

lzma ×1

performance ×1

xz ×1