7

我已经看到这个问题被问了几次,但到目前为止我无法使用任何帖子解决方案取得成功。我想要做的是重命名应用程序本地存储中的文件(对于 Obj-c 来说也是一种新的)。我能够检索旧路径并创建新路径,但是我必须写什么才能真正更改文件名?

到目前为止,我所拥有的是:

- (void) setPDFName:(NSString*)name{
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                   NSUserDomainMask, YES);
    NSString* initPath = [NSString stringWithFormat:@"%@/%@",[dirPaths objectAtIndex:0], @"newPDF.pdf"];
    NSString *newPath = [[NSString stringWithFormat:@"%@/%@",
                          [initPath stringByDeletingLastPathComponent], name]
                         stringByAppendingPathExtension:[initPath pathExtension]];
}
4

2 回答 2

19
NSError *error = nil;
[[NSFileManager defaultManager] moveItemAtPath:initPath toPath:newPath error:&error];
于 2013-01-11T15:15:27.660 回答
12

代码很乱;试试这个:

- (BOOL)renameFileFrom:(NSString*)oldName to:(NSString *)newName
{
    NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                   NSUserDomainMask, YES) objectAtIndex:0];
    NSString *oldPath = [documentDir stringByAppendingPathComponent:oldName];
    NSString *newPath = [documentDir stringByAppendingPathComponent:newName];

    NSFileManager *fileMan = [NSFileManager defaultManager];
    NSError *error = nil;
    if (![fileMan moveItemAtPath:oldPath toPath:newPath error:&error])
    {
        NSLog(@"Failed to move '%@' to '%@': %@", oldPath, newPath, [error localizedDescription]);
        return NO;
    }
    return YES;
}

并使用:

if (![self renameFileFrom:@"oldName.pdf" to:@"newName.pdf])
{
    // Something went wrong
}

更好的是,将该renameFileFrom:to:方法放入实用程序类中并使其成为类方法,以便可以从项目中的任何位置调用它。

于 2013-01-11T15:22:05.183 回答