我使用下面的代码复制在文件浏览器中选择的文件,并将其复制到具有不同名称的临时目录。但是当我选择一个包含空格的文件时,程序会抛出一个错误,说它无法找到指定的精细路径。我尝试过使用转义方法,但它们也不起作用。有没有其他方法可以处理带空格的文件名?
代码从这里开始:
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
[openPanel close];
if (result == NSFileHandlingPanelOKButton) {
myString = [self randomStringWithLength:7];
NSString *filePath = [[[openPanel URLs] objectAtIndex:0] absoluteString];
NSLog(@"%@", filePath);
NSString *strTemp = [self extractString:filePath toLookFor:@"//" skipForwardX:2 toStopBefore:@".png"];
NSLog(@"%@",strTemp);
NSString *realThing = [strTemp stringByReplacingOccurrencesOfString:@"%20" withString:@"\\ "];
//strTemp = [strTemp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", realThing);
NSString* fullPath = [NSString stringWithFormat:@"/tmp/%@.png", myString];
NSLog(fullPath);
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtPath:realThing toPath:fullPath error:&error];
if(error) {
NSLog(@"Error!!!");
NSLog(@" error => %@ ",error);
}
else {
NSLog(@"Saved to temp directory");
}
任何人都有这方面的经验吗?感谢
答案 0 :(得分:2)
您将URL转换为路径非常复杂且容易出错。
只需使用path
方法:
NSString *filePath = [[[openPanel URLs] objectAtIndex:0] path];
或者,使用copyItemAtURL:...
代替copyItemAtPath:...
。
您还应该检查copyItemAtPath:...
的返回值作为指标
失败:
if (![[NSFileManager defaultManager] copyItemAtPath:filePath toPath:fullPath error:&error]) {
NSLog(@" error => %@ ",error);
}
比较Handling Error Objects Returned From Methods:
重要提示:成功或失败由返回值表示 方法。虽然Cocoa方法间接返回错误对象 如果是,Cocoa错误域保证返回这样的对象 方法通过直接返回nil或NO来表示失败,你应该 在尝试之前,始终检查返回值是否为“否” 使用NSError对象执行任何操作。
答案 1 :(得分:0)
您似乎试图手动将URL转换为文件路径。请改用fileSystemRepresentation。