1

我正在尝试将驻留在 NSDocumentDirectory 中的所有文档移动到 NSCachesDirectory,然后在我的应用程序的下一个版本更新的第一个应用程序启动时删除所有这些 NSDocument 文件。我这样做的唯一原因是遵守 Apple 的 iOS 数据存储指南,因为我的应用更新因将 .PDF 文件保存到 NSDocumentsDirectory 而被拒绝(我不知道为什么,因为在此之前该应用从未被拒绝过)更新(应用程序已经快 2 年了,从第一天开始我就一直以这种方式保存 .PDF),也许我有一个严格的审阅者?)

我需要将所有用户已经下载的 .PDF 文件移动到 NSCachesDirectory,然后从 NSDocumentDirectory 中删除它们。

有没有一种简单的方法可以完成?

预先感谢您提供的任何帮助。

我试过这个:

NSFileManager *fileManager = [NSFileManager defaultManager];

NSError *error;
NSUserDefaults      *Defaults;
 int                 launchCount;

 Defaults = [NSUserDefaults standardUserDefaults];
 launchCount = [Defaults integerForKey:@"launchCount" ] + 1;
 [Defaults setInteger:launchCount forKey:@"launchCount"];
 [Defaults synchronize];

if(launchCount == 1) {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *dest = [path2 objectAtIndex:0];

NSArray *Contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:&error];

    for(NSString *source in Contents)
    {
        if(![fileManager moveItemAtPath:source
                                 toPath:dest
                                  error:&error])
        {
            //TODO: Handle error
            NSLog(@"Error: %@", error);
        }
    }
}

但我在控制台中收到此错误:

NSFilePath=Test.pdf, NSDestinationFilePath=/Users/Charley/Library/Application Support/iPhone Simulator/5.1/Applications/96EB01D1-81B7-4ECE-B337-D2D663969EE3/Library/Caches, NSUnderlyingError=0xb566d50 "操作无法完成。 文件已存在”

4

1 回答 1

2

是的,使用 NSFileManager:

获取您的文档路径和缓存路径。遍历所有文件,并使用 NSFileManager 移动它们

- (void) moveAllDocs {
    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSError *error = nil;

    NSString *sourceDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *destinationDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSArray *contents = [fileManager contentsOfDirectoryAtPath:sourceDirectory error:&error];

    for(NSString *sourceFileName in contents) {
        NSString *sourceFile = [sourceDirectory stringByAppendingPathComponent:sourceFileName];
        NSString *destFile = [destinationDirectory stringByAppendingPathComponent:sourceFileName];
        if(![fileManager moveItemAtPath:sourceFile toPath:destFile error:&error]) {
            NSLog(@"Error: %@", error);
        }
    }

}
于 2012-08-23T22:29:00.540 回答