在制作DEMO中,使用到了获取程序文件路径的自定义方法:
-(NSString*)documentsDirectory{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths firstObject];
return documentsDirectory;
}
其中,NSDocumentDirectory 是指程序中对应的Documents路径,而NSDocumentionDirectory对应于程序中的Library/Documentation路径,这个路径是没有读写权限的,所以看不到文件生成。
iOS中NSSearchPathForDirectoriesInDomains函数
如果要指定其他文件目录,比如Caches目录,需要更换目录常量为 NSCachesDirectory。 使用NSSearchPathForDirectoriesInDomains只能定位Caches目录和Documents目录。 tmp目录,不能按照上面的做法获得目录了,有个函数可以获得应用的根目录:NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
, NSUserDomainMask
, YES);
NSLog(@"Get document path: %@",[paths objectAtIndex:0]);NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"];
NSString *content=@"write data into myFile";
NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding];
if ([contentData writeToFile:fileName atomically:YES]) {
NSLog(@">>write ok.");
}NSString *contentChinese=@"写入汉字信息到文件";
NSData *contentChineseData=[contentChinese dataUsingEncoding:NSUnicodeStringEncoding];
if ([contentData writeToFile:fileName atomically:YES]) {
NSLog(@">>写入成功。");
也就是Documents的上级目录,当然也是tmp目录的上级目录。那么文件路径可以这样写:NSHomeDirectory()
或者,更直接一点,可以用这个函数:NSString *fileName=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/myFile.txt"];
不过生成的路径将可能是:NSTemporaryDirectory()
…/tmp/-Tmp-/myFile.txt
(一)使用文件
在编写应用项目的时候,常常会使用资源文件,比如:
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);