在NSDocumentDirectory中重命名和保存

时间:2012-09-06 03:30:48

标签: iphone ios xcode ipad

就像这样,在我的应用中,我有UIScrollView就是缩略图,它们是我NSCachesDirectory的图片。 我将它们从我的选择器中保存起来然后在我的数组中命名为:images0.png,images.1.png ...等等

例如,我的目录中有图像:images0.png, images1.png, images2.png, images3.png

然后我删除images1.png,剩下的图片会是这样的:images0.png,images2.png, images3.png对吗?

我想要实现的是获取NSDocumentsDirectory中的图片然后重新命名为AGAIN或再次将它们排序为images0.png, images1.png, images2.png ...等等? 这可能吗?希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

使用此 NSFileManger moveItemAtPath:toPath:error:,但您应提供 toPath:same_path_but_different_filename 。这会将文件移动到具有您提供的新文件名的新路径。 see this

由于您似乎希望整个逻辑重命名您的图像文件,如果文件位于Document目录中,可以尝试以下代码

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString * oldPath =[[NSString alloc]init];
NSString * newPath =[[NSString alloc]init];

int count=0;
for (int i=0; i<=[[fileManager contentsOfDirectoryAtPath:documentsDirectory error:nil]count]; i++) {

    oldPath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"images%d.png",i]];

    if ([fileManager fileExistsAtPath:oldPath]) {

        newPath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"images%d.png",count]];
        [fileManager moveItemAtPath:oldPath toPath:newPath error:nil]; 
        count+=1;

    }

}

答案 1 :(得分:0)

Apple不允许重命名已保存的文件。所以另一种方法是将所有内容放在文档目录中,如下所示:

NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:yourDocDirPath error:NULL];

现在排序如下:

NSSortDescriptor * descriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending: YES comparator:^NSComparisonResult(id obj1, id obj2){
     return [obj1 compare: obj2 options: NSNumericSearch];
 }];

NSArray * sortedDirectoryContent = [directoryContent sortedArrayUsingDescriptors:[NSArray arrayWithObject: descriptor]];

我们已对数组进行排序,使用新名称重写所有文件:

for(NSString *fileName in sortedDirectoryContent)
{
  NSString *filePath = [yourDocDirPath stringByAppendingPathComponent:fileName];
  NSData *fileData = [[NSData alloc]initWithContentsOfFile:filePath];
  if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
    [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];

    if(fileData)
    {
        NSString *newFilePath = [yourDocDirPath stringByAppendingPathComponent:@"New Name here"];
        [fileData writeToFile:newFilePath atomically:YES];
    }
  }
  else
  {
    if(fileData)
    {
        NSString *newFilePath = [yourDocDirPath stringByAppendingPathComponent:@"New Name here"];
        [fileData writeToFile:newFilePath atomically:YES];
    }
  }

}