1、文件操作文件操作管理文件(NSFileManager)path必须是NSString,可以使用表示用户的主目录,NSFileManager提供的操作文件的方法有:P207一个操作文件的例子/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights reserved./#import int main(int argc, const char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; NSString *fi
2、leName = file; NSFileManager *fm; NSDictionary *nsd; fm = NSFileManager defaultManager; if (fm fileExistsAtPath:fileName = NO) NSLog(文件并不存在); return 1; else if (fm copyPath:fileName toPath:file1 handler:nil = NO) NSLog(文件不能拷贝); return 1; else if (fm contentsEqualAtPath:fileName andPath:file1 = NO) N
3、SLog(文件不相等); return 1; else if (fm movePath:fileName toPath:file2 handler:nil = NO) NSLog(文件不能重命名); return 1; else if (nsd = fm fileAttributesAtPath:file2 traverseLink:NO) = nil) NSLog(不能得到文件属性); return 1; else if (nsd != nil) for (NSString *str in nsd) NSLog(% : %, str, nsd objectForKey:str); else
4、if (fm removeFileAtPath:fileName handler:nil = NO) NSLog(删除文件出错); return 1; NSLog(程序正常运行); / 输出文件里面的string NSLog(%, NSString stringWithContentsOfFile:file2 encoding:NSUTF8StringEncoding error:nil); pool release; return 0; 首先执行这个程序,必须保证生成的程序目录下有file这个文件,可以在xcode选择other创建出来,然后在里边写上:“hello,”“hello,”“he
5、llo,”结果可以看到输出:管理目录P210一个例子/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights reserved./#import int main(int argc, const char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; NSString *dirName = dir1; NSFileManager *fm; NSString *path; NSDirectoryEnumerat
6、or *dirEnum; NSArray *dirArray; fm = NSFileManager defaultManager; path = fm currentDirectoryPath; NSLog(当前的目录是:%, path); if (fm createDirectoryAtPath:dirName attributes:nil = NO) NSLog(目录创建失败); return 1; else if (fm movePath:dirName toPath:dir2 handler:nil = NO) NSLog(目录重命名失败); return 1; else if (f
7、m changeCurrentDirectoryPath:Lee = NO) NSLog(设置目录失败); return 1; path = fm currentDirectoryPath; NSLog(经过修改之后的目录为:%, path); NSLog(使用enumeratorAtPath:方法枚举目录:); dirEnum = fm enumeratorAtPath:path; while (path = dirEnum nextObject) != nil) NSLog(%, path); NSLog(使用directoryContentsAtPath:方法枚举目录); dirArra
8、y = fm directoryContentsAtPath:fm currentDirectoryPath; for (path in dirArray) NSLog(%, path); pool release; return 0;需要保证在生成程序的目录底下有Lee的文件夹,里面有几个文件。这是输出:操作文件数据(NSData)在基础框架中,可以使用NSData类来设置缓冲区,换句话说,可以把NSData对象当做缓冲区:P213/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights
9、 reserved./#import int main(int argc, const char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; NSFileManager *fm; NSData *data; fm = NSFileManager defaultManager; data = fm contentsAtPath:readMe; if (data = nil) NSLog(文件不能读取); return 1; else if (fm createFileAtPath:readMe1 contents
10、:data attributes:nil = NO) NSLog(文件不能创建); return 1; NSLog(拷贝后的文件内容为:); NSLog(%, NSString stringWithContentsOfFile:readMe1 encoding:NSUTF8StringEncoding error:nil); pool release; return 0;首先执行这个程序,必须保证生成的程序目录下有readMe这个文件,可以在xcode选择other创建出来,然后在里边写上:“hello, ”“hello, ”“hello, ”结果可以看到输出:操作目录总结 有时需要在程序中获
11、得临时目录来创建一些临时文件,或者从主目录中读取文件。NSTemporaryDirectory方法就是返回临时目录。相关方法:P215例子/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights reserved./#import int main(int argc, const char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; NSFileManager *fm; NSString *fName =
12、readMe.h; NSString *path, *tempDir, *extDir, *homeDir, *fullPath; NSString *testPath = Lee/sam/lee/./readMe.h; NSArray *dirArray; fm = NSFileManager defaultManager; tempDir = NSTemporaryDirectory(); NSLog(临时文件的目录为:%, tempDir); path = fm currentDirectoryPath; NSLog(当前的文件目录是:%, path lastPathComponent)
13、; fullPath = path stringByAppendingPathComponent:fName; NSLog(添加一个带扩展名的文件%后的完整路径为:%, fName, fullPath); extDir = fullPath pathExtension; NSLog(路径%的扩展名是%, fullPath, extDir); homeDir = NSHomeDirectory(); NSLog(用户根目录为%, homeDir); dirArray = homeDir pathComponents; for (path in dirArray) NSLog(%, path);
14、NSLog(% , testPath stringByStandardizingPath); pool release; return 0; 输出为:文件的读写(NSFileHandle)有时需要更精确地处理文件中的内容,比如,每次读写文件中的几个字符。这就需要使用NSFileHandle类。方法有:P217一个例子/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights reserved./#import int main(int argc, const char * argv) NSA
15、utoreleasePool *pool = NSAutoreleasePool alloc init; NSFileHandle *file1, *file2; NSData *fd; file1 = NSFileHandle fileHandleForReadingAtPath:readMe; if (file1 = nil) NSLog(打开文件进行读取操作失败!); return 1; NSFileManager defaultManagercreateFileAtPath:readMe1 contents:nil attributes:nil; file2 = NSFileHandl
16、e fileHandleForWritingAtPath:readMe1; if (file2 = nil) NSLog(打开文件进行写入操作失败); return 1; file2 truncateFileAtOffset:0; fd = file1 readDataToEndOfFile; file2 writeData:fd; NSLog(将文件1读取的内容写入文件2以后:); NSLog(%, NSString stringWithContentsOfFile:readMe1 encoding:NSUTF8StringEncoding error:nil); file2 seekToE
17、ndOfFile; file2 writeData:fd; NSLog(将我们的文件1的内容拷贝到文件2的末尾后:); NSLog(%, NSString stringWithContentsOfFile:readMe1 encoding:NSUTF8StringEncoding error:nil); file1 closeFile; file2 closeFile; pool release; return 0; 必须保证生成的程序目录下有readMe这个文件(否则会出现打开失败),可以在xcode选择other创建出来,然后在里边写上:“hello, ”“hello, ”“hello,
18、”进程信息(NSProcessInfo) NSProcessInfo类用于获取当前正在执行的进程信息,比如,当前机器的名称、操作系统类型等,常用方法:P220一个例子/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights reserved./#import int main(int argc, const char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; NSProcessInfo *proc = N
19、SProcessInfo processInfo; NSArray *args = proc arguments; for (NSString *str1 in args) NSLog(当前进程的参数为:%, str1); NSString *pn = proc processName; NSString *hn = proc hostName; NSLog(当前进程的进程名为%,进程的主机名%, pn, hn); NSString *osn = proc operatingSystemName; NSInteger os = proc operatingSystem; NSString *o
20、svs = proc operatingSystemVersionString; NSLog(当前系统的名称为:%操作系统代表数字为:%li 当前系统的版本号为:%, osn, os, osvs); pool release; return 0;综合使用了NSArray、NSProcessInfo、NSCountedSet以及NSEnumeratorP221/ main.m/ test/ Created by Zeng on 13-5-24./ Copyright (c) 2013年 zeng. All rights reserved./#import int main(int argc, c
21、onst char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; NSArray *arr = NSProcessInfo processInfoarguments; NSCountedSet *cset1 = NSCountedSet allocinitWithArray:arr; NSArray *sorted_arr = cset1 allObjectssortedArrayUsingSelector:selector(compare:); NSEnumerator *enmr = sorted_arr objectEnumerator; id letter; while (letter = enmr nextObject) printf(%sn, letter UTF8String); cset1 release; pool release; return 0; 在控制台下执行test程序,输入几个字母,然后回车程序使用了NSCountedSet的initWithArray方法将保存在数组中的参数,存入NSCountedSet对象中,这样的操作会去除重复的参数:NSCountedSet *cset1 = NSCountedSet allocinitWithArray:arr;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1