OC-文件处理

6-17文件管理


1.文件管理器:

作用:要想对文件进行管理,第一步必须要有文件管理器

注意:一个程序中,只能有一个文件管理器,它可以对多个文件进行管理。

------------------------------------------------------------------------------------

文件管理器的使用:

1)创建文件管理器:

NSFileManager * fm = [NSFileManager defaultManager];

------------------------------------------------------------------------------------

2)查看目录下的内容1

方法一:浅度遍历显示目录下的内容

主要语句:

NSArray * array = [fm contentsOfDirectoryAtPath:@"/Users/qianfeng/Desktop1" error:&error];



例如:

NSError * error;//错误信息

NSArray * array = [fm contentsOfDirectoryAtPath:@"/Users/qianfeng/Desktop1" error:&error];

if (!error) 

{

    NSLog(@"array = %@",array);

    NSLog(@"成功了");

}

else

{

   NSLog(@"失败了\nerror = %@",error);

}


函数说明:

返回值:查看成功把目录下内容放入数组中

第一个参数:目录的路径

第二个参数:错误信息:显示成功时errornil;失败时error为错误信息的地址


方法二:深度遍历显示目录下的内容

主要语句:

array = [fm subpathsOfDirectoryAtPath:[NSString stringWithUTF8String:argv[2]] error:&error];


NSArray * array ;

NSError * error;

NSFileManager * fm = [NSFileManager defaultManager];

array = [fm subpathsOfDirectoryAtPath:路径 error:&error];

//深度遍历目录下的内容

if(!error)

{

   NSLog(@"array = %@",array);

}

else

{

   NSLog(@"参数输入错误!");

}

------------------------------------------------------------------------------------

3)创建一个文件夹

主要函数:

BOOL ret = [fm createDirectoryAtPath:@"/Users/Rebecca/Desktop/1310test" withIntermediateDirectories:YES attributes:nil error:nil];


函数说明:

返回值:创建成功返回YES

第二个参数:当目标目录路径存在,YES代表创建、NO代表不创建;

          当目标目录路径不存在,YESNO都代表创建;

          当需要创建的目录之前的路径只要有一个不存在的时候,YES代表创建、NO代表不创建;

第三个参数:属性或者权限(nil代表默认属性)

第四个参数:代表错误信息,如果不想查看错误信息,传入nil


例子:

NSFileManager * fm = [NSFileManager defaultManager];

BOOL ret = [fm createDirectoryAtPath:@"/Users/Rebecca/Desktop/1310test" withIntermediateDirectories:YES attributes:nil error:nil];

if (ret)

{

    NSLog(@"创建成功了");

}

else

{

    NSLog(@"创建失败了");

}

------------------------------------------------------------------------------------

4)创建一个文件

主要函数:

//判断文件是否存在

BOOL retFile = [fm fileExistsAtPath:@"/Users/qianfeng/Desktop/222.c"];

//创建文件

BOOL ret = [fm createFileAtPath:@"/Users/Rebecca/Desktop/111.c" contents:nil attributes:nil];


函数说明:

创建文件函数的第二个参数:代表文件内容,nil代表空文件

当文件存在时,会替换


例子:

NSFileManager * fm = [NSFileManager defaultManager];

BOOL retFile = [fm fileExistsAtPath:@"/Users/Rebecca/Desktop/111.c"];

if (retFile==YES)

{1

    NSLog(@"文件已存在");

}

else

{

   BOOL ret = [fm createFileAtPath:@"/Users/Rebecca/Desktop/111.c" contents:nil attributes:nil];

if (ret)

{

    NSLog(@"成功了");

}

else

{

    NSLog(@"失败了");

    exit(1);

}


其他知识点补充:

return exit的区别:

return:代表当前函数的返回,结束当前函数

exit:代表结束当前进程(单进程的话,会结束整个程序)

          

------------------------------------------------------------------------------------

5)获取文件属性

例子:

//获取文件属性,并将属性放入字典中。

NSDictionary * fileDict = [fm attributesOfFileSystemForPath:@"Users/Rebecca/Desktop/111.c" error:nil];


//获取文件大小(方法一)

unsigned long long size = [fileDict fileSize];


//获取文件大小(方法二)

[fileDict objectForKey:@"NSSileSize"];


------------------------------------------------------------------------------------

6)拷贝文件or目录

主要函数:

        BOOL retCp = [fm copyItemAtPath:@"/Users/Rebecca/Desktop/111.c" toPath:@"/Users/Rebecca/Desktop/111_bak.c" error:nil];


函数说明:

第一个参数:需要拷贝的文件or目录的路径名(需要拷贝的文件or目录必须存在)

第二个参数:拷贝到的位置+拷贝后文件or文件夹的名称。

第三个参数:错误信息


例子:

NSFileManager * fm = [NSFileManager defaultManager];

BOOL retCp = [fm copyItemAtPath:@"/Users/Rebecca/Desktop/111.c" toPath:@"/Users/Rebecca/Desktop/111_bak.c" error:nil];

if (retCp == YES

{

   NSLog(@"拷贝成功");

}

else

{

   NSLog(@"拷贝失败");

}

------------------------------------------------------------------------------------

7)移动文件or目录

主要函数:

BOOL ret =[fm moveItemAtPath:@"/Users/Rebecca/Desktop/111.c" toPath:@"/Users/Rebecca/111_bak.c" error:nil];


函数说明:

保证目标文件名要写完整,不能只写路径,不命名


例子:

NSFileManager * fm = [NSFileManager defaultManager];

BOOL ret =[fm moveItemAtPath:@"/Users/Rebecca/Desktop/111.c" toPath:@"/Users/Rebecca/111_bak.c" error:nil];

if (ret)

{

   NSLog(@"移动成功");

}

else

{

   NSLog(@"移动失败");

}

------------------------------------------------------------------------------------

8)删除文件or目录

主要函数:

[fm removeItemAtPath:@"Users/Rebecca/Desktop/111.c" error:nil];


函数说明:

删除函数谨慎使用,它不会将删除内容放入废纸篓中,而是直接删除,找不回来。


********************************************************************************************

2.文件的读写

1)文件缓冲区

说明:文件的读写操作,需要通过文件的缓冲区完成。OC文件缓冲区存储的数据类型是:NSData类型


                       转   换

OC字符串<-------->文件缓冲区

写入过程:先将OC字符串转换为NSData类型,即:将字符串放入文件缓冲区中

例子:

     NSString * str = @"Welcome to Beijing";

     NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];


读出过程:把文件缓冲区的内容读成字符串

例子:

NSString * ptr =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",ptr);


------------------------------------------------------------------------------------

2)文件句柄

说明:a.对一个文件进行读写操作,要创建文件句柄,来打开文件。

         b.OC的创建文件只能由文件管理器操作,打开文件不不会创建文件


以下三种方法打开失败时均返回nil

方法一:

//以只读的方式打开一个文件

NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:@"此处填写文件路径"];

方法二:

//以只写方式打开一个文件

NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:@"此处填写文件路径"];

方法二:

//以读写方式打开一个文件

NSFileHandle *fh = [NSFileHandle fileHandleForUpdatingAtPath:@"此处填写文件路径"];

----------------------------------------------------------------------------------------------------------------------

3)关于文件偏移量

说明:a.打开之后,文件偏移量为0,即:在文件首。

          b.同一个程序中,每读一次文件偏移量都会后移。


移动文件偏移量:

方法一:

[fh seekToFileOffset:0];//0时,即:把文件偏移量定位到文件首

方法二:

[fh seekToEndOfFile];//把文件偏移量定位到文件尾;

------------------------------------------------------------------------------------

4)文件的读写操作

读操作:

方法一:

NSData * data = [fh readDataOfLength:10];//每次读10个字节长度;//每读一次文件偏移量都会后移

NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];


方法二:

//从当前位置读到文件尾

NSData * data = [fh readDataToEndOfFile];

NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

该方法的使用说明:

a.只有当剩余未读字节数比较少的时候,才使用这个函数。

b.一般不使用这个函数让从文件首读到文件尾,这样的会太占内存,影响程序执行效率;即使有要求要读全文件,一般也是一段一段逐渐去读,不用此函数。


写操作:

例子:

//向文件中追加数据

NSFileHandle * fh = [NSFileHandle fileHandleForUpdatingAtPath:@"/Users/Rebecca/Desktop/test.c"];

//将文件偏移量定位到文件尾,然后再填入内容;否则的话,会覆盖数据来写入。

[fh seekToEndOfFile];

NSString * str = @"Welcome to Beijing";

NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];

[fh writeData:data];













你可能感兴趣的:(OC-文件处理)