';Don';不要丢失文件&x27;在Objective-C中

';Don';不要丢失文件&x27;在Objective-C中,objective-c,macos,file,directory,Objective C,Macos,File,Directory,在TextEdit中,当您将打开的文件移动到另一个文件夹时,TextEdit会找出该文件的实际文件夹,并询问您是否可以将其保存到新文件夹中。如果我在Objective-C中打开了一个文件并将其移动到另一个文件夹,我如何才能找到该文件现在所在的文件夹?您可以使用 监视打开的文件描述符的更改,如重命名操作 (从系统调用跟踪来看,这似乎就是TextEdit所做的) 下面是一些简单的示例代码:。 我没用过,但可能有用 您可以通过fcntl()系统调用来确定打开文件的路径 在文件描述符上。示例(这是经过测

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

您可以使用 监视打开的文件描述符的更改,如重命名操作 (从系统调用跟踪来看,这似乎就是TextEdit所做的)

下面是一些简单的示例代码:。 我没用过,但可能有用

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

这将提供当前路径,即使文件已移动到其他位置 打开后的位置。

您可以使用 监视打开的文件描述符的更改,如重命名操作 (从系统调用跟踪来看,这似乎就是TextEdit所做的)

下面是一些简单的示例代码:。 我没用过,但可能有用

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

这将提供当前路径,即使文件已移动到其他位置
打开后的位置。

在Objective-C中没有打开的文件。Objective-C是语言。我假设你是指在XCode中打开的文件?在Objective-C中没有打开的文件。Objective-C是语言。我想你指的是在XCode中打开的文件?这似乎正是我要找的。我会试试看,然后我会在这里告诉你它是否有效。它不起作用。”路径“”等于“/dev/ttys000/”而不是实际文件夹。加载时定义fh是正确的,但当用户需要保存并创建新的“路径”时,它变成了“/dev/ttys000/”。更正:在任何情况下,它始终是“/dev/ttys000/”。@GammaStudio:这可能意味着
fh=nil
。因为
[fh fileDescriptor]=0
,这是stdin的fd,所以
fcntl(…)
返回当前tty的路径。但是fh不是空的,fh等于
[nsfilehandlefilehandleforreadingatpath:file]
,其中
file
是一个带有文件/文件夹位置的NSString。我怎样才能修理这个?如果是文件夹而不是文件,则需要更改某些内容?这似乎正是我要查找的内容。我会试试看,然后我会在这里告诉你它是否有效。它不起作用。”路径“”等于“/dev/ttys000/”而不是实际文件夹。加载时定义fh是正确的,但当用户需要保存并创建新的“路径”时,它变成了“/dev/ttys000/”。更正:在任何情况下,它始终是“/dev/ttys000/”。@GammaStudio:这可能意味着
fh=nil
。因为
[fh fileDescriptor]=0
,这是stdin的fd,所以
fcntl(…)
返回当前tty的路径。但是fh不是空的,fh等于
[nsfilehandlefilehandleforreadingatpath:file]
,其中
file
是一个带有文件/文件夹位置的NSString。我怎样才能修理这个?如果是文件夹而不是文件,则需要更改某些内容?
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)];
}