看官们,我们在前面章回中介绍了Foundation框架中的NSFileHandle,本章回中将继续介绍该内容。
我们在上一章回中主要介绍了NSFileHandle类中文件操作相关的方法,在实际项目中需要综合使用这些方法才能完成文件操作,文件操作的主要步骤可以分为三大步:打开、读写、关闭,我自己称其为文件操作三步曲。这么说可能比较抽象,接下来我们通过代码来演示这三个步骤,下面是具体的代码,请大家参考:
#include<Foundation/Foundation.h>
int main()
{
NSFileHandle *fhIn, *fhOut;
NSFileManager *fm;
char data[5] = "hello";
NSData *buffer = [[NSData alloc] initWithBytes:data length:5];
NSString * inPath = @"/Users/talk8/in";
NSString * outPath = @"/Users/talk8/out";
NSError *error;
int result = 0;
unsigned long long offset = 0;
fm = [NSFileManager defaultManager];
//判断文件是否存在,只有文件存在时才能进行读写操作
if(![fm fileExistsAtPath:inPath]) {
[fm createFileAtPath:inPath contents:buffer attributes:nil];
}
fhIn = [NSFileHandle fileHandleForReadingAtPath:inPath];
if(fhIn == nil) {
NSLog(@" open: %@ failed.",inPath);
result = 1;
}
//判断文件是否存在,只有文件存在时才能进行读写操作
if(![fm fileExistsAtPath:outPath]) {
[fm createFileAtPath:outPath contents:nil attributes:nil];
}
fhOut = [NSFileHandle fileHandleForWritingAtPath:outPath];
if(fhOut == nil) {
NSLog(@" open: %@ failed.",outPath);
result = 1;
}
//从文件中读取内容并且通过Log显示出来
NSString *str;
// NSData *tempData = [fhIn readDataOfLength:5];
NSData *tempData = [fhIn readDataUpToLength:5 error:&error];
if(error == nil) {
str = [[NSString alloc] initWithData:tempData encoding:NSUTF8StringEncoding];
NSLog(@" contents of File: %@",str);
} else {
NSLog(@" can't get contents of file");
}
//循环读取文件中的内容走到文件末尾
// while([tempData length] > 0 && error == nil) {
// tempData = [fhIn readDataUpToLength:5 error:&error];
// }
//读取文件内容后,文件指针的位置发生了变化,通过log输出可以看到
[fhIn getOffset:&offset error:nil];
NSLog(@" offset: %llu",offset);
//重置文件指针到文件初始位置,不然下次无法从文件开头读取文件内容
[fhIn seekToOffset:0 error:nil];
//从一个文件中读取内容然后保存到另外一个文件中
[fhOut writeData: [fhIn readDataOfLength:5]];
//文件读写完成后需要关闭文件
if(fhIn != nil) {
// [fhIn closeFile];
result = [fhIn closeAndReturnError:&error];
fhIn = nil;
}
if(fhOut != nil) {
// [fhOut closeFile];
result = [fhOut closeAndReturnError:&error];
fhOut = nil;
}
return 0;
}
在代码中我们添加了相关的注释,以方便大家理解代码。不过我们还要强调一些文件操作的注意事项:
- 1.打开文件时需要判断文件是否存在,以避免不必要的麻烦;
- 2.打开文件后需要判断文件是否被成功打开,然后再进行读写操作;
- 3.读写操作需要注意文件指针的位置,必要通过定位方法修改文件指针位置;
- 4.读写操作可以单次执行,也可以通过循环多次执行,到达文件尾部时读取内容为0进而结束循环;
最后我们对本章回的内容做一个总结:
- 1.文件操作主要包含三大步骤:打开、读写、关闭;
- 2.文件操作有四个注意点,请参考上面的总结的内容;
看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!