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