我正在开发文件管理系统,就像 * 可可 * 中的*Dropbox*一样。我的问题是当我编辑任何文本文件时NSFileSystemFileNumber被更改。即使已编辑的文件已从特定文件夹中移动,我也需要唯一的NSFileSystemFileNumber。简而言之,我只想知道如何从数据库中获取移动文件的旧路径或原始路径。还有别的办法解决这个问题吗?感谢Adv..!!
af7jpaap1#
这取决于编辑器保存功能的实现方式。每个编辑器都有不同的功能,听起来你正在使用的编辑器会执行以下操作:1.删除现有文件。1.创建新文件。1.写入文件数据。因此,您每次都会得到一个新的inode。其他人可以:1.截断现有文件。1.写入文件数据。这将导致每次相同的索引节点。你对此无能为力,所以你需要使用名称或其他东西来跟踪文件更改,而不是inode。
vlju58qv2#
您可以在数据库中使用的另一个选项。使用NSURL API您可以提取文件的许多属性。其中一些正好符合你的身份识别需求。查阅NSURL documentation for the NSURLResourceKey常量集。这是一个代码片段。
NSURL
NSURL *fileURL = [NSURL fileURLWithPath:filePath]; NSArray *identifyingAttributes = @[NSURLFileResourceIdentifierKey, NSURLDocumentIdentifierKey, NSURLGenerationIdentifierKey]; NSDictionary<NSURLResourceKey, id> *fileAttributes = [fileURL resourceValuesForKeys:identifyingAttributes error:&error]; NSNumber *uniqueFileIdentifier = fileAttributes[NSURLDocumentIdentifierKey];
我认为NSURLDocumentIdentifierKey属性是您要找的属性,但数组中的其他属性可能更适合您-在文档中阅读它们非常特殊的行为。
nlejzf6q3#
只是一个想法-一些我自己没有尝试过的东西。为什么不使用MacOS的旧“别名”机制?为要跟踪的文件/document/bundle/目录创建一个别名(即使它被移动或重命名,或其内容被编辑),并将别名保存在数据库中。然后-你实际上卸载的问题(跟踪文件更改)到MacOS...据我所知(那是20年前的事了……)别名是对象--不一定是文件--所以你可以在任何地方保存别名。这不像创建一个指向您想要跟踪的文件的符号链接-这会创建另一个文件系统对象。我需要类似的东西,所以我会尝试这种方法很快-如果它为我工作,我会在这里更新。
3条答案
按热度按时间af7jpaap1#
这取决于编辑器保存功能的实现方式。每个编辑器都有不同的功能,听起来你正在使用的编辑器会执行以下操作:
1.删除现有文件。
1.创建新文件。
1.写入文件数据。
因此,您每次都会得到一个新的inode。其他人可以:
1.截断现有文件。
1.写入文件数据。
这将导致每次相同的索引节点。
你对此无能为力,所以你需要使用名称或其他东西来跟踪文件更改,而不是inode。
vlju58qv2#
您可以在数据库中使用的另一个选项。
使用
NSURL
API您可以提取文件的许多属性。其中一些正好符合你的身份识别需求。查阅NSURL documentation for the NSURLResourceKey常量集。
这是一个代码片段。
我认为NSURLDocumentIdentifierKey属性是您要找的属性,但数组中的其他属性可能更适合您-在文档中阅读它们非常特殊的行为。
nlejzf6q3#
只是一个想法-一些我自己没有尝试过的东西。
为什么不使用MacOS的旧“别名”机制?为要跟踪的文件/document/bundle/目录创建一个别名(即使它被移动或重命名,或其内容被编辑),并将别名保存在数据库中。然后-你实际上卸载的问题(跟踪文件更改)到MacOS...
据我所知(那是20年前的事了……)别名是对象--不一定是文件--所以你可以在任何地方保存别名。这不像创建一个指向您想要跟踪的文件的符号链接-这会创建另一个文件系统对象。
我需要类似的东西,所以我会尝试这种方法很快-如果它为我工作,我会在这里更新。