欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS NSFileHandle的使用

程序员文章站 2022-06-24 20:11:56
iOS NSFileHandle的使用。读取数据时,读取的是NSData,后再转换成NSString,当出现转换NSString为nil时,是因为NSData为不完全的。 NNS...

iOS NSFileHandle的使用。读取数据时,读取的是NSData,后再转换成NSString,当出现转换NSString为nil时,是因为NSData为不完全的。

NNString的中文字符1位对应转换成NSData时是3位。

所以在指定位置,指定长度时,需要以NSData来计算。

/**
 *  写入内容到指定位置
 *
 *  @param filePath 文件路径(如:xxx/xx/.../xx.txt)
 *  @param content  内容
 *  @param position 位置
 */
+ (void)writeFileWithFilePath:(NSString *)filePath content:(NSString *)content position:(unsigned long long)position
{
    NSFileHandle *fielHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
    // 将节点跳到文件指定位置
    [fielHandle seekToFileOffset:position];
    // 写入内容
    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
    // 追加写入数据
    [fielHandle writeData:data];
    [fielHandle closeFile];
}
/**
 *  写入内容到文件末尾
 *
 *  @param filePath 文件路径(如:xxx/xx/.../xx.txt)
 *  @param content  内容
 */
+ (void)writeFileBackWithFilePath:(NSString *)filePath content:(NSString *)content
{
    NSFileHandle *fielHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
    // 将节点跳到文件末尾
    [fielHandle seekToEndOfFile];
    // 写入内容
    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
    // 追加写入数据
    [fielHandle writeData:data];
    [fielHandle closeFile];
}
/**
 *  读取文件指定位置后指定长度的内容
 *
 *  @param filePath 文件路径(如:xxx/xx/.../xx.txt)
 *  @param position 指定位置
 *  @param length   指定长度
 *
 *  @return NSString
 */
+ (NSString *)readFileWithFilePath:(NSString *)filePath position:(unsigned long long)position length:(NSUInteger)length
{
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
    // 偏移量文件
    [fileHandle seekToFileOffset:position];
    NSData *data = [fileHandle readDataOfLength:length];
    [fileHandle closeFile];
    NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return text;
}
/**
 *  读取文件内容
 *
 *  @param filePath 文件路径(如:xxx/xx/.../xx.txt)
 *
 *  @return NSString
 */
+ (NSString *)readFileWithFilePath:(NSString *)filePath
{
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
    NSData *data = [fileHandle readDataToEndOfFile];
    [fileHandle closeFile];
    NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return text;
}

/**
 *  复制文件内容
 *
 *  @param fromPath 复制前原文件路径(如:xxx/xxx/.../xx.txt)
 *  @param toPath   复制后新文件路径(如:xaxa/abxx/../aaa.txt)
 */
+ (void)copyFileWithFilePath:(NSString *)fromPath toPath:(NSString *)toPath
{
    // 输入文件
    NSFileHandle *infile = [NSFileHandle fileHandleForReadingAtPath:fromPath];
    // 读取的缓冲数据 读取数据
    NSData *buffer = [infile readDataToEndOfFile];
    [infile closeFile];
    
    // 输出文件
    NSFileHandle *outfile = [NSFileHandle fileHandleForWritingAtPath:toPath];
    // 将输出文件的长度设为0
    [outfile truncateFileAtOffset:0];
    // 写入输入
    [outfile writeData:buffer];
    [outfile closeFile];
}