0

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

4

1 回答 1

3

您可以使用“内核队列” 来监视打开的文件描述符的更改,例如重命名操作(从系统调用跟踪来看,这似乎是 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)];
}

这给出了当前路径,即使文件在打开后已移动到不同的位置。

于 2013-08-20T17:46:16.787 回答