.DS_Store 文件跳过
Posted
技术标签:
【中文标题】.DS_Store 文件跳过【英文标题】:.DS_Store file skipping 【发布时间】:2012-11-01 09:38:16 【问题描述】:在我的应用程序中,我使用 NSFileManager 使用以下代码获取文件夹中的文件数
NSFileManager *manager=[NSFileManager defaultManager];
NSString *path;
int numberofFiles=[[manager contentsOfDirectoryAtPath:path error:nil] count];
numberofFiles=numberofFiles-1; //number of files except .DS_Store
但我的问题是文件 .DS_Store 并不总是默认创建,当时我得到的计数少于该目录中实际存在的文件计数。
那么在 NSFileManager 中是否有一个方法可以返回不包括 .DS_Store 的文件数组 或者我必须使用 -IsEqualToString 方法手动排除 否则是否有任何选项可以创建没有 .DS_Store 文件的新目录。
【问题讨论】:
您可以将[manager contentsOfDirectoryAtPath:path error:nil]
存储到NSArray
并使用NSPredicate 过滤掉.DS_Store。
检查https://github.com/xiaozhuai/odourless,我做了一个防止.DS_Store的工具。
【参考方案1】:
明确查找.DS_Store
文件并在找到时调整计数:
NSFileManager *manager=[NSFileManager defaultManager];
NSString *path = ...; // Presumably this is a valid path?
NSArray *contents = [manager contentsOfDirectoryAtPath:path error:nil];
NSUInteger numberOfFiles = [contents count];
if ([contents indexOfObject:@".DS_Store"] != NSNotFound)
numberOfFiles--;
【讨论】:
【参考方案2】:试试这个..它对我有用..
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *manager = [NSFileManager defaultManager];
NSArray *imageFilenames = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
for (int i = 0; i < [imageFilenames count]; i++)
NSString *imageName = [NSString stringWithFormat:@"%@/%@",documentsDirectory,[imageFilenames objectAtIndex:i] ];
if (![[imageFilenames objectAtIndex:i]isEqualToString:@".DS_Store"])
UIImage *myimage = [UIImage imageWithContentsOfFile:imageName];
UIImageView *imageView = [[UIImageView alloc] initWithImage:_myimage];
【讨论】:
以上是关于.DS_Store 文件跳过的主要内容,如果未能解决你的问题,请参考以下文章
使用 Tower 忽略 gitignore 文件中的 .DS_Store
.DS_Store 文件是什么?Mac下面如何禁止.DS_Store生成