在TextEdit中,当您将打开的文件移动到另一个文件夹时,TextEdit会找出该文件的实际文件夹,并询问您是否可以将其保存在新文件夹中。如果我在Objective-C中打开了一个文件并将其移动到另一个文件夹,我怎样才能找到该文件现在在哪个文件夹中?
答案 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)];
}
即使文件已移动到其他路径,也会显示当前路径 打开后的位置。