C# 在C中提取.dmg文件#
这个问题最近进入了我的脑海:如何用C#提取DMG文件C# 在C中提取.dmg文件#,c#,7zip,dmg,C#,7zip,Dmg,这个问题最近进入了我的脑海:如何用C#提取DMG文件 我做了很多研究,我发现也许用7-zip库提取它是可能的,但当我尝试时,让我们说它令人失望;我不能让它工作 所以我想问,这真的有可能吗 还是有图书馆可以做这项工作 这是我的代码: ArchiveFile f = new ArchiveFile("path to dmg file", "path to 7z.dll"); Console.WriteLine(f.Entries[0].FileName); Con
我做了很多研究,我发现也许用7-zip库提取它是可能的,但当我尝试时,让我们说它令人失望;我不能让它工作 所以我想问,这真的有可能吗 还是有图书馆可以做这项工作 这是我的代码:
ArchiveFile f = new ArchiveFile("path to dmg file", "path to 7z.dll");
Console.WriteLine(f.Entries[0].FileName);
Console.ReadKey();
使用“SevenZipExtractor”nuget包和类似于您的代码(见下文),我面临着几个问题 我遇到的第一个问题是“SevenZipExtractor.SevenZipException”,内部异常表示“%1”不是有效的Win32应用程序。这是由于编译为任何CPU,但使用64位7-zip安装 我面临的第二个问题是ArchiveFile类的“Entries”属性中的空引用异常。反编译强调了这里发生了很多事情。我拉下了存储库,删除了nuget包,并直接引用了该项目,目的是在库中调试该问题,但令人惊讶的是,这似乎能按预期工作 奇怪的是,(或者可能是因为我不知道DMG格式),我的测试DMG()没有列出我在使用7zip文件管理器打开它时看到的相同文件。我本来希望看到一个名为Firefox的文件夹,但却发现了3个文件:
- 0.5分米
- 1.苹果分区图
- 2.hfs
using System;
using System.IO;
using System.Linq;
using SevenZipExtractor;
namespace _7zip
{
class Program
{
static void Main(string[] args)
{
const string workingDirectory = @"C:\Profile\Repositories\7zipPlayground\7zip\bin\Debug\";
using (var archiveFile = new ArchiveFile(Path.Combine(workingDirectory, "test.dmg"), @"C:\Program Files\7-Zip\7z.dll"))
{
var files = archiveFile.Entries?.ToList();
foreach (var f in files)
{
Console.WriteLine($"File: {f.FileName}");
}
var hfsFile = files.FirstOrDefault(x => x.FileName.ToLower().Contains("hfs"));
if (hfsFile == null)
return;
hfsFile.Extract(Path.Combine(workingDirectory, hfsFile.FileName));
using (var hfsArchiveFile = new ArchiveFile(Path.Combine(workingDirectory, hfsFile.FileName), @"C:\Program Files\7-Zip\7z.dll"))
{
files = hfsArchiveFile.Entries?.ToList();
foreach (var f in files)
{
Console.WriteLine($"File: {f.FileName}");
}
}
}
Console.ReadLine();
}
}
}
由于上面的示例适用于我,使用我以前安装的7zip版本和上面GitHub存储库中的项目,我只能假设在这一点上,此项目转换为nuget包的方式有问题,此包的应用方式有问题,或者项目中的bug已经修复,包尚未更新。不管怎样,由于没有发布完整的代码和没有堆栈跟踪,您的问题是什么,或者问题发生在哪里还不完全清楚,但我已经复制了一个类似的问题,并按照上面所述解决了它。错误是什么?谁说带7-zip的dmg?ArchiveFile是7-zip库的一部分吗?它是一个Nuget软件包吗?@Jeremythonpson错误是“无法初始化SevenZipHandle”,它是sevenzipextractor库。您可以使用7zip使用此方法提取任何其他格式吗?@Gui是的,我尝试过。zip“无法初始化SevenZipHandle”表示它无法与7zip二进制文件交互。我认为任何存档文件类型都会失败。确保编译为32/64位,以匹配已安装的7zip版本。