zoukankan      html  css  js  c++  java
  • Objective-C之NSFileHandle和NSFileManager

    NSFileManager(管理文件和目录)类主要功能:

    1、创建一个新的文件;

    2、从现有文件中读取数据;

    3、将数据写入文件中;

    4、对文件进行删除、复制、重命名的操作;

    5、测试文件是否存在;

    6、测试两个文件的内容是否相同;

    7、确定文件的大小和其他属性。

    常见的NSFileManager文件方法:

        NSString *fName = @"testfile";

        NSFileManager *fm;

        NSDictionary *attr;

        //创建文件管理器的实例;

        fm = [NSFileManager defaultManager];

        if ([fm fileExistsAtPath:fName] == NO) {//确认测试文件是否存在;

            NSLog(@"File doesn't exist");

        }

        //创建一个副本,to后面的是新创建的副本,其本身一定要是 不存在的;

        if ([fm copyItemAtPath:fName toPath:@"newfile" error:NULL] == NO) {

            NSLog(@"File Copy failed");

        }

        //比较两个文件的内容是否一样

        if ([fm contentsEqualAtPath:fName andPath:@"newfile"] == NO) {

            NSLog(@"File are Not Equal!");

        }

        //重命名或者移动文件,to后面的文件一定是之前不存在的;这个方法可以用来讲文件从一个目录移动到另外一个目录上(也可以移动整个目录)如果两个路径引用同一个目录中的文件,其结果仅仅是重新命名这个文件;

        if ([fm moveItemAtPath:@"newfile" toPath:@"newfile2" error:NULL] == NO) {

            NSLog(@"File rename failed");

        }

        //获取newfile2的大小;

        if ((attr = [fm attributesOfItemAtPath:@"newfile2" error:NULL]) ==nil) {

            NSLog(@"could't get file attributes");

        }

        if ([fm removeItemAtPath:fName error:NULL] ==NO) {//最后删除原始文件;

            NSLog(@"file remove failed");

            

        }

     结果:

    File doesn't exist

    File Copy failed

    File are Not Equal!

    File rename failed

    could't get file attributes

    File size is 0 bytes

    file remove failed

    NSFileHandle类主要功能:

    1、打开现有的文件,对文件的内容进行读、写或更新(读取和写入)操作;

    2、再文件中查找指定位置;

    3、从文件中读取特定数目的字节,或将制定数目的字节写入文件内。

    NSFileHandle处理文件的步骤

    1:创建一个NSFileHandle对象

    2:对打开的文件进行I/O操作

    3:关闭文件对象操作

    NSFileHandle的基本用法:

    @property (readonly, copy) NSData *availableData;//可用的数据

    @property (readonly) unsigned long long offsetInFile;当前文件的偏移量 

    - (NSData *)readDataToEndOfFile; 从当前的节点读到文件末尾,最多是(NINT_MAX个字节);

    - (NSData *)readDataOfLength:(NSUInteger)length;从当前节点开始读取指定的长度数据;

    - (void)writeData:(NSData *)data;写入数据;

    - (unsigned long long)seekToEndOfFile;跳到文件末尾

    - (void)seekToFileOffset:(unsigned long long)offset;跳到指定文件的指定的偏移量的位置;

    - (void)synchronizeFile;同步文件

    - (void)closeFile; //关闭文件

    - (void)truncateFileAtOffset:(unsigned long long)offset; //设置文件长度

    + (id)fileHandleForReadingAtPath:(NSString *)path; //打开一个文件准备读取

    + (id)fileHandleForWritingAtPath:(NSString *)path; //打开一个文件准备写入

    + (id)fileHandleForUpdatingAtPath:(NSString *)path; //打开一个文件可以更新(读取,写入)

    补充说明:

    a:NSFileHandle只能打开现成的文件,所以如果是新文件则需要NSFileManager先创建新文件;

    b:打开一个文件就后,就需要关闭一个文件;

    c:根据不同的要求可能要设定不同的偏移量(即光标所在位置),可以通过移动到开头或结尾,也可以先获取当前位置然后增加和减少多少字节来移动;

    d:文件路径是NSString对象,可以用 stringByAppendingPathComponent+文件全称 方法构造一个完整的文件路径; 

    e:往文件里面写的内容是NSData,如果是其他的格式则可以用 dataUsingEncoding : NSUTF8StringEncoding 来转化成data类型;

    f:同样,目录的写法于Linux类似,~家目录,/根目录,.当前目录,..父目录,用/表示层级等

     

  • 相关阅读:
    《大道至简》读后感
    第一周学习总结-Java
    c++与java的几个不同点
    单调队列 滑动窗口模型
    计算空间
    关于dp初始化问题
    康托展开小结-
    Vm-Ubuntu下配置Qt开发环境
    C++学习013多态
    C++学习012友元
  • 原文地址:https://www.cnblogs.com/wangliyuan/p/4748825.html
Copyright © 2011-2022 走看看