1

就像这样,在我的应用程序中,我有UIScrollView一个缩略图视图,它们是我的NSCachesDirectory. 我从我的选择器中保存了它们,然后在我的数组中命名它们,例如:images0.png,images.1.png...等

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

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

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

4

2 回答 2

1

使用这个NSFileManger moveItemAtPath: toPath: error: 但你应该提供toPath:same_path_but_different_filename。这会将文件移动到具有您提供的新文件名的新路径。看到这个

由于您似乎希望整个逻辑重命名您的图像文件,因此您可以尝试以下代码,前提是文件位于 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;

    }

}
于 2012-09-06T04:06:38.190 回答
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];
    }
  }

}
于 2012-09-06T04:42:29.627 回答