有没有办法在Windows C#中区分macintosh或macOS文件类型?
我的C#项目必须判断一个即将读取的文件是否是运行在macOS上的Mac文件 有一个C#项目运行在Windows 2008或更高版本上。我想知道即将读取的文件是否是运行在Mac操作系统上的Mac文件 我想知道这样的代码是否可行有没有办法在Windows C#中区分macintosh或macOS文件类型?,c#,macos,file,C#,Macos,File,我的C#项目必须判断一个即将读取的文件是否是运行在macOS上的Mac文件 有一个C#项目运行在Windows 2008或更高版本上。我想知道即将读取的文件是否是运行在Mac操作系统上的Mac文件 我想知道这样的代码是否可行 string fileType = fileTypeChecker(anonymousFile); if(fileType=="mac") { // do something. } 它们可以通过文件扩展名来区分吗?或任何类型
string fileType = fileTypeChecker(anonymousFile);
if(fileType=="mac")
{
// do something.
}
它们可以通过文件扩展名来区分吗?或任何类型的文件签名?阅读后我的理解是,您想检查该文件是否适用于Mac或Windows。您可以通过以下方式完成此操作:
string fileName = "hamza.DMG";
string mimeType = System.Web.MimeMapping.GetMimeMapping(fileName);
它将返回指定文件名的MIME映射,您可以根据该映射轻松地进行区分。有关更多信息,请查看此项
注:对于.NET Framework>=4.5
MacOS使用Mach-O二进制可执行格式 您需要查找Mach-O二进制文件的签名,如下所述: 是我想要用来实现这个目标的开源软件。 你认为使用下面的代码片段有助于完成我的任务吗? 我认为这是可行的
public void ShouldOpenMachO()
{
var fileName = Utilities.GetBinary("simple-mach-o");
ELFSharp.MachO.MachO machO;
Assert.AreEqual(MachOResult.OK, MachOReader.TryLoad(fileName, out machO));
}
“在Mac操作系统上运行”是什么意思?您是否通过网络共享访问它们?如果不是,你只想获取一个任意文件并确定它源于哪个操作系统,那么在大多数情况下,我认为这是不可能的。为什么?我认为这个问题的前提是文件有一个与操作系统相关的“类型”,目标是找到它。这是不正确的,除非搜索某些特定的文件类型,这些文件类型是苹果专有的,因此可能只起源于Mac电脑。但这不是可以发现的文件属性。我是一名安全解决方案程序员。我主要处理windows PE文件。但这次我也要处理mac文件。大多数情况下,我的软件将在没有internet连接的隔离环境中运行。正如John所说,我获取一个任意文件并确定它是否是Mac文件。目前我唯一能想到的方法是使用扩展名“dmg”。“我是一名安全解决方案程序员”-请你的问题解释你的目标,而不是你的职称。首先,您需要正确定义“在Mac操作系统上运行的Mac文件”。因为例如,JPEG文件可以在任何具有适当查看器软件的操作系统上打开。您提到了“dmg”,它是用于软件安装的特定于Mac的。您应该了解“幻数”以识别文件格式。如果你在网上搜索,你会发现。这告诉你一个JPEG文件是一个图像,但它是否在Mac上。我用这段代码检查某个dmg文件。它只告诉你这个文件是八位字节/流。@Hwanchan:你可以根据这个区分mac文件或windows文件。“你可以根据这个区分mac文件或windows文件”-不,你不能,因为你甚至不知道OP到底想要什么。如果我将
.exe
重命名为.dmg
,此代码仍将返回应用程序/八位字节流
,并且不会告诉该文件是用于MacOS还是用于Windows。看起来很稳定。不过,这取决于您的用例,因为标准链接器生成的Mach-O应该可以工作。如果你用它来对付一些疯狂的手写可执行文件(比如恶意软件),它可能是不够的。