我正在尝试使用绝对路径打开文件。我的应用程序使用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
。当我知道该文件存在时,为什么会这样?
答案 0 :(得分:4)
file://localhost/Users/macuser/test.txt
是URI,而不是文件路径。处理字符串以去除包括/localhost
在内的所有内容,它应该没问题。
请注意,只有URI中没有转义序列时,此类解决方案才有效。如下所述,从Objective C端发送路径可能更简单。