就像这样,在我的应用中,我有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
...等等?
这可能吗?希望你能帮助我。
答案 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];
}
}
}