基本上我正在寻找一种方法来将文件系统中的两个文件夹与
cocoa API合并:
我有一个包含文件和子文件夹的文件夹,我想将其复制到文件系统中的其他位置.
在我的目标路径中,已存在同名文件夹,该文件夹也可能包含文件和文件夹.
现在我想用我的源文件夹的新内容覆盖我的目标文件夹(或其子文件夹)中的现有文件,如果它们具有相同的名称.
我想要保留的所有其余文件都不会受到影响.
sourcefolder | - file1 - subfolder - file2 destinationfolder | - file3 - subfolder - file2 - file4 resultingfolder | - file1 - file3 - subfolder - file2 <-- version from source folder - file4
我怎样才能做到这一点?
非常感谢你的帮助!
解决方法
我到处搜索但一无所获.所以我想出了自己的解决方案,利用NSDirectoryEnumerator.这应该适用于图表(覆盖旧文件).希望能帮助到你.
- (void)mergeContentsOfPath:(NSString *)srcDir intoPath:(NSString *)dstDir error:(NSError**)err { NSLog(@"- mergeContentsOfPath: %@\n intoPath: %@",srcDir,dstDir); NSFileManager *fm = [NSFileManager defaultManager]; NSDirectoryEnumerator *srcDirEnum = [fm enumeratorAtPath:srcDir]; NSString *subPath; while ((subPath = [srcDirEnum nextObject])) { NSLog(@" subPath: %@",subPath); NSString *srcFullPath = [srcDir stringByAppendingPathComponent:subPath]; NSString *potentialDstPath = [dstDir stringByAppendingPathComponent:subPath]; // Need to also check if file exists because if it doesn't,value of `isDirectory` is undefined. BOOL isDirectory = ([[NSFileManager defaultManager] fileExistsAtPath:srcFullPath isDirectory:&isDirectory] && isDirectory); // Create directory,or delete existing file and move file to destination if (isDirectory) { NSLog(@" create directory"); [fm createDirectoryAtPath:potentialDstPath withIntermediateDirectories:YES attributes:nil error:err]; if (err && *err) { NSLog(@"ERROR: %@",*err); return; } } else { if ([fm fileExistsAtPath:potentialDstPath]) { NSLog(@" removeItemAtPath"); [fm removeItemAtPath:potentialDstPath error:err]; if (err && *err) { NSLog(@"ERROR: %@",*err); return; } } NSLog(@" moveItemAtPath"); [fm moveItemAtPath:srcFullPath toPath:potentialDstPath error:err]; if (err && *err) { NSLog(@"ERROR: %@",*err); return; } } } }