C fopen无法打开OS X的绝对路径

时间:2013-03-09 16:59:23

标签: objective-c c fopen

我正在尝试使用绝对路径打开文件。我的应用程序使用objective-c发送它想要打开的文件,并使用C打开它。我尝试使用此

打开它
NSString *str = [[NSString alloc]init];
NSOpenPanel *o = [[NSOpenPanel alloc]init];
[o setAllowsMultipleSelection:NO];
[o setCanChooseDirectories:NO];
[o setCanChooseFiles:YES];
[o setPrompt:@"Open"];
if ([o runModal] == NSOKButton )
{
    // Get an array containing the full filenames of all
    // files and directories selected.
    NSArray* files = [o URLs];

    // Loop through all the files and process them.
    int i;
    for( i = 0; i < [files count]; i++ )
    {
        NSString* fileName = [[files objectAtIndex:i] absoluteString];
        NSLog(@"%@", fileName);

        str = [NSString stringWithFormat:@"%s", openFile([fileName UTF8String])];
        self.tv.string = str;
    }

}

openfile方法就是这个

char *openFile(const char file[1024]){
FILE *f = fopen(file, "r");
static char c[1000];
char *d;
if (f!=NULL) {
    if (fgets(c, 1000, f) !=NULL){
        d = c;
    }
    else{
        d = "No text";
    }
}
else{
    d="error";
    perror(f);
}
fclose(f);

return d;
}

它会发送类似file://localhost/Users/macuser/test.txt的绝对路径,但是perror(f); 返回No such file or directory。当我知道该文件存在时,为什么会这样?

1 个答案:

答案 0 :(得分:4)

file://localhost/Users/macuser/test.txt是URI,而不是文件路径。处理字符串以去除包括/localhost在内的所有内容,它应该没问题。

请注意,只有URI中没有转义序列时,此类解决方案才有效。如下所述,从Objective C端发送路径可能更简单。