参考文章
http://nshipster.cn/nsfilemanager/
确定文件是否存在
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"file.txt"];
BOOL fileExists = [fileManager fileExistsAtPath:filePath];列出文件里面的所有目录
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
NSArray *contents = [fileManager contentsOfDirectoryAtURL:bundleURL
includingPropertiesForKeys:@[]
options:NSDirectoryEnumerationSkipsHiddenFiles
error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension == 'png'"];
for (NSURL *fileURL in [contents filteredArrayUsingPredicate:predicate]) {
// 在目录中枚举 .png 文件
}用递归的方式在目录中遍历文件
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL
includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey]
options:NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:^BOOL(NSURL *url, NSError *error)
{
if (error) {
NSLog(@"[Error] %@ (%@)", error, url);
return NO;
}
return YES;
}];
NSMutableArray *mutableFileURLs = [NSMutableArray array];
for (NSURL *fileURL in enumerator) {
NSString *filename;
[fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil];
NSNumber *isDirectory;
[fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil];
// Skip directories with '_' prefix, for example
if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) {
[enumerator skipDescendants];
continue;
}
if (![isDirectory boolValue]) {
[mutableFileURLs addObject:fileURL];
}
}创建一个目录
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *imagesPath = [documentsPath stringByAppendingPathComponent:@"images"];
if (![fileManager fileExistsAtPath:imagesPath]) {
[fileManager createDirectoryAtPath:imagesPath withIntermediateDirectories:NO attributes:nil error:nil];
}]删除一个目录
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"];
NSError *error = nil;
if (![fileManager removeItemAtPath:filePath error:&error]) {
NSLog(@"[Error] %@ (%@)", error, filePath);
}删除文件的创建日期
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"Document.pages"];
NSDate *creationDate = nil;
if ([fileManager fileExistsAtPath:filePath]) {
NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
creationDate = attributes[NSFileCreationDate];
}
通过NSFileManager的 -attributesOfItemAtPath:error: 和其它方法可以访问很多文件的属性
文件属性的键
NSFileAppendOnly: 文件是否只读NSFileBusy: 文件是否繁忙NSFileCreationDate: 文件创建日期NSFileOwnerAccountName: 文件所有者的名字NSFileGroupOwnerAccountName: 文件所有组的名字NSFileDeviceIdentifier: 文件所在驱动器的标示符NSFileExtensionHidden: 文件后缀是否隐藏NSFileGroupOwnerAccountID: 文件所有组的group IDNSFileHFSCreatorCode: 文件的HFS创建者的代码NSFileHFSTypeCode: 文件的HFS类型代码NSFileImmutable: 文件是否可以改变NSFileModificationDate: 文件修改日期NSFileOwnerAccountID: 文件所有者的IDNSFilePosixPermissions: 文件的Posix权限NSFileReferenceCount: 文件的链接数量NSFileSize: 文件的字节NSFileSystemFileNumber: 文件在文件系统的文件数量NSFileType: 文件类型NSDirectoryEnumerationSkipsSubdirectoryDescendants: 浅层的枚举,不会枚举子目录NSDirectoryEnumerationSkipsPackageDescendants: 不会扫描pakages的内容NSDirectoryEnumerationSkipsHiddenFile: 不会扫描隐藏文件
本文介绍如何使用NSFileManager在iOS应用中进行文件管理操作,包括检查文件存在性、列举目录内容、递归遍历目录、创建及删除目录等,并提供了常用的文件属性键。
1041

被折叠的 条评论
为什么被折叠?



