iphone 获取某一个目录中的所有文件列表(转)

转自:http://blog.csdn.net/javali1984/article/details/6559558

NSFileManager *fileManager = [NSFileManager defaultManager];
//在这里获取应用程序Documents文件夹里的文件及文件夹列表
        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentDir = [documentPaths objectAtIndex:0];
        NSError *error = nil;
        NSArray *fileList = [[NSArray alloc] init];
//fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组
        fileList = [fileManager contentsOfDirectoryAtPath:documentDir error:&error];

    以下这段代码则可以列出给定一个文件夹里的所有子文件夹名

NSMutableArray *dirArray = [[NSMutableArray alloc] init];
        BOOL isDir = NO;
//在上面那段程序中获得的fileList中列出文件夹名
        for (NSString *file in fileList) {
                NSString *path = [documentDir stringByAppendingPathComponent:file];
                [fileManager fileExistsAtPath:path isDirectory:(&isDir)];
                if (isDir) {
                        [dirArray addObject:file];
                }
                isDir = NO;
        }
        NSLog(@"Every Thing in the dir:%@",fileList);
        NSLog(@"All folders:%@",dirArray);

 

ios访问Documents目录下的文件的注意点

ios访问Documents目录下的文件,注意:

1>.拼接的路径字符串是否正确;

2>.拼接的路径的方式:

     第一种, 字符串变量 + ...+字符串常量 拼接:

    demo1:

    NSString* docPath = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"]; 

    NSString* path = [NSString stringWithFormat: @"%@/%@", docPath, @"23.png"];

    

    demo2:

    NSString* docPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];  

    NSString* path =  [NSStringstringWithFormat: @"%@%@.png", docPath, aFileName];  

    "23.png", ".png"是我说的常量.


    第二种, 字符串变量 + ...+字符串变量 拼接:

    NSString* docPath = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];  

    NSString* path =  [NSString stringWithFormat: @"%@%@", docPath, aFileName];  


    现在要说的是第二种方法是错误的,因为在NSString字符串变量末位有'\0'字符,

而文件相关的API要求路径字符串末位不能包含'\0'字符,所以在路径format的时候要注意最后一个字符串不能为NSString

变量,必须为字符串常量.如果要在一个路径后面追加路径NSString变量, 请使用stringByAppendingPathComponent方法,

添加后缀请使用stringByAppendingPathExtension方法.

 

iOS 获取用户主目录
http://blog.sinzy.net/jinjian/entry/22283

使用底层的C函数NSHomeDirectory() 能够访回当前app当前用户的主目录
用户数据都建议放在/Documents中
每一个iOS应用沙盒都有/Documents目录
NSString  *path = [NSHomeDirectory() stringByAppendingString:USER_FILE];
补方法二
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
[paths objectAtIndex:0] 即为/Documents根目录
NSString  *plistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myfile.txt"];

 

iOS中对文件的操作
http://marshal.easymorse.com/archives/3340

 

因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件:


Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
在Documents目录下创建文件

代码如下:


 

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
                                            , NSUserDomainMask 
                                            , YES); 
NSLog(@"Get document path: %@",[paths objectAtIndex:0]);

NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"]; 
NSString *content=@"a"; 
NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding]; 
if ([contentData writeToFile:fileName atomically:YES]) { 
    NSLog(@">>write ok."); 
}


 

可以通过ssh登录设备看到Documents目录下生成了该文件。

上述是创建ascii编码文本文件,如果要带汉字,比如:


 

NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"]; 
NSString *content=@"更深夜静人已息"; 
NSData *contentData=[content dataUsingEncoding:NSUnicodeStringEncoding]; 
if ([contentData writeToFile:fileName atomically:YES]) { 
    NSLog(@">>write ok."); 
}


 

如果还用ascii编码,将不会生成文件。这里使用NSUnicodeStringEncoding就可以了。

通过filezilla下载到创建的文件打开,中文没有问题:

 
在其他目录下创建文件

如果要指定其他文件目录,比如Caches目录,需要更换目录工厂常量,上面代码其他的可不变:


 

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory
                                                , NSUserDomainMask 
                                                , YES);

 


 

使用NSSearchPathForDirectoriesInDomains只能定位Caches目录和Documents目录。

tmp目录,不能按照上面的做法获得目录了,有个函数可以获得应用的根目录:


 

NSHomeDirectory()


 

也就是Documents的上级目录,当然也是tmp目录的上级目录。那么文件路径可以这样写:


 

NSString *fileName=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/myFile.txt"];


 

或者,更直接一点,可以用这个函数:


 

NSTemporaryDirectory()


 

不过生成的路径将可能是:


 

…/tmp/-Tmp-/myFile.txt


使用资源文件

在编写应用项目的时候,常常会使用资源文件,比如:

 安装到设备上后,是在app目录下的:

 以下代码演示如何获取到文件并打印文件内容:


 

NSString *myFilePath = [[NSBundle mainBundle] 
                        pathForResource:@"f" 
                        ofType:@"txt"]; 
NSString *myFileContent=[NSString stringWithContentsOfFile:myFilePath encoding:NSUTF8StringEncoding error:nil]; 
NSLog(@"bundel file path: %@ \nfile content:%@",myFilePath,myFileContent);

 


 

代码运行效果:

 
 

你可能感兴趣的:(ios学习)