获取 MacOS 文件夹/文件 ID C#

Posted

技术标签:

【中文标题】获取 MacOS 文件夹/文件 ID C#【英文标题】:Getting a MacOS folder/file ID C# 【发布时间】:2020-01-06 14:55:33 【问题描述】:

编辑:我刚读到微软产品在保存时经常删除并创建一个新文件,所以我们可能需要一个与下面完全不同的解决方案......

我正在编写一些代码来在我的应用程序运行时跟踪 Windows 和 Mac 上的文件和文件夹更改,但如果它没有运行,它还需要检测更改。

我可以通过使用以下帖子获取文件夹和文件 ID 在 Windows 上执行此操作:

Getting a Folder ID C#

现在我需要一个适用于 Mac 的解决方案,但搜索后我发现有点空。我找不到任何有关系统范围的文件夹/文件 ID 的信息。我最接近解决方案的是使用某种可以跟踪文件的书签,如下所述,但我还没有开始:

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW10

似乎我必须将这些书签存储为 Alias 文件,以便在程序启动备份时调用。

在 Mac 上使用 C# 获取全局文件/文件夹 ID 还有其他选项吗?

【问题讨论】:

unix 文件系统使用 inode 来唯一地跟踪文件 - 不确定是否有 Mac API,但这是我要搜索的内容 【参考方案1】:

您可以使用NSFileManager.GetAttributes 获取文件的“inode”(正如 Jason 的评论所说)

注意:当然,如果跨卷移动,如果编辑文件的程序执行删除和重新创建与替换等操作时,inode 会发生变化......

示例:

var ns = NSFileManager.DefaultManager;
var attribs = ns.GetAttributes("/Users/sushi/Desktop/foo.txt");
Console.WriteLine(attribs.SystemFileNumber);
File.Move("/Users/sushi/Desktop/foo.txt", "/Users/sushi/Desktop/foo2.txt");
var attribs2 = ns.GetAttributes("/Users/sushi/Desktop/foo2.txt");
Console.WriteLine(attribs2.SystemFileNumber);

【讨论】:

以上是关于获取 MacOS 文件夹/文件 ID C#的主要内容,如果未能解决你的问题,请参考以下文章

检查文件访问,获取进程ID

如何从 Xamarin MacOS 开发中的另一个 C# 文件更新 ViewController.cs 中的“标签”?

如何从输入中获取多选文件到c#对象

C# 下载url文件 WebClientHttpWebRequest

如何在 C# 中按进程获取打开文件句柄的列表?

如何在 MacOS 上获取文件类型的图标?