当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS NSFileHandle的使用

iOS NSFileHandle的使用

2018年04月05日  | 移动技术网IT编程  | 我要评论

旖旎乱天下,蜜浓,荒地幻听

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];
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网