如何处理带空格的文件名?

时间:2014-10-05 08:46:26

标签: objective-c xcode cocoa error-handling spaces

我使用下面的代码复制在文件浏览器中选择的文件,并将其复制到具有不同名称的临时目录。但是当我选择一个包含空格的文件时,程序会抛出一个错误,说它无法找到指定的精细路径。我尝试过使用转义方法,但它们也不起作用。有没有其他方法可以处理带空格的文件名?

代码从这里开始:

[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");
        }

任何人都有这方面的经验吗?感谢

2 个答案:

答案 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。