在Objective-C中“不要丢失文件”

时间:2013-08-20 17:12:19

标签: objective-c macos file directory

在TextEdit中,当您将打开的文件移动到另一个文件夹时,TextEdit会找出该文件的实际文件夹,并询问您是否可以将其保存在新文件夹中。如果我在Objective-C中打开了一个文件并将其移动到另一个文件夹,我怎样才能找到该文件现在在哪个文件夹中?

1 个答案:

答案 0 :(得分:4)

您可以使用"Kernel Queues" 监视打开的文件描述符以进行重命名操作等更改 (从系统调用跟踪看来,这似乎是TextEdit的作用)。

以下是一些简单的示例代码:http://doc.geoffgarside.co.uk/kqueue/file.html。 我没有使用它,但可能有帮助。

您可以使用fcntl()系统调用确定打开文件的路径 在文件描述符上。示例(并且经过测试: - ):

NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:...];

char pathbuf[MAXPATHLEN];
if (fcntl([fh fileDescriptor], F_GETPATH, pathbuf) == -1) {
    NSLog(@"could not get file path: %s", strerror(errno));
} else {
    NSString *path = [[NSFileManager defaultManager]
                          stringWithFileSystemRepresentation:pathbuf
                                                      length:strlen(pathbuf)];
}

即使文件已移动到其他路径,也会显示当前路径 打开后的位置。