文件操作.docx

上传人:b****3 文档编号:3555254 上传时间:2022-11-23 格式:DOCX 页数:15 大小:750.59KB
下载 相关 举报
文件操作.docx_第1页
第1页 / 共15页
文件操作.docx_第2页
第2页 / 共15页
文件操作.docx_第3页
第3页 / 共15页
文件操作.docx_第4页
第4页 / 共15页
文件操作.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

文件操作.docx

《文件操作.docx》由会员分享,可在线阅读,更多相关《文件操作.docx(15页珍藏版)》请在冰豆网上搜索。

文件操作.docx

文件操作

文件操作

管理文件(NSFileManager)

path必须是NSString,可以使用~表示用户的主目录,NSFileManager提供的操作文件的方法有:

P207一个操作文件的例子

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSString*fileName=@"file";

NSFileManager*fm;

NSDictionary*nsd;

fm=[NSFileManagerdefaultManager];

if([fmfileExistsAtPath:

fileName]==NO){

NSLog(@"文件并不存在");

return1;

}elseif([fmcopyPath:

fileNametoPath:

@"file1"handler:

nil]==NO){

NSLog(@"文件不能拷贝");

return1;

}elseif([fmcontentsEqualAtPath:

fileNameandPath:

@"file1"]==NO){

NSLog(@"文件不相等");

return1;

}elseif([fmmovePath:

fileNametoPath:

@"file2"handler:

nil]==NO){

NSLog(@"文件不能重命名");

return1;

}elseif((nsd=[fmfileAttributesAtPath:

@"file2"traverseLink:

NO])==nil){

NSLog(@"不能得到文件属性");

return1;

}elseif(nsd!

=nil){

for(NSString*strinnsd){

NSLog(@"%@:

%@",str,[nsdobjectForKey:

str]);

}

}elseif([fmremoveFileAtPath:

fileNamehandler:

nil]==NO){

NSLog(@"删除文件出错");

return1;

}

NSLog(@"程序正常运行");

//输出文件里面的string

NSLog(@"%@",[NSStringstringWithContentsOfFile:

@"file2"encoding:

NSUTF8StringEncodingerror:

nil]);

[poolrelease];

return0;

}

首先执行这个程序,必须保证生成的程序目录下有file这个文件,可以在xcode选择other创建出来,然后在里边写上:

“hello,”

“hello,”

“hello,”

结果可以看到输出:

管理目录

P210一个例子

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSString*dirName=@"dir1";

NSFileManager*fm;

NSString*path;

NSDirectoryEnumerator*dirEnum;

NSArray*dirArray;

fm=[NSFileManagerdefaultManager];

path=[fmcurrentDirectoryPath];

NSLog(@"当前的目录是:

%@",path);

if([fmcreateDirectoryAtPath:

dirNameattributes:

nil]==NO){

NSLog(@"目录创建失败");

return1;

}elseif([fmmovePath:

dirNametoPath:

@"dir2"handler:

nil]==NO){

NSLog(@"目录重命名失败");

return1;

}elseif([fmchangeCurrentDirectoryPath:

@"Lee"]==NO){

NSLog(@"设置目录失败");

return1;

}

path=[fmcurrentDirectoryPath];

NSLog(@"经过修改之后的目录为:

%@",path);

NSLog(@"使用enumeratorAtPath:

方法枚举目录:

");

dirEnum=[fmenumeratorAtPath:

path];

while((path=[dirEnumnextObject])!

=nil){

NSLog(@"%@",path);

}

NSLog(@"使用directoryContentsAtPath:

方法枚举目录");

dirArray=[fmdirectoryContentsAtPath:

[fmcurrentDirectoryPath]];

for(pathindirArray){

NSLog(@"%@",path);

}

[poolrelease];

return0;

}

需要保证在生成程序的目录底下有Lee的文件夹,里面有几个文件。

这是输出:

操作文件数据(NSData)

在基础框架中,可以使用NSData类来设置缓冲区,换句话说,可以把NSData对象当做缓冲区:

P213

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSFileManager*fm;

NSData*data;

fm=[NSFileManagerdefaultManager];

data=[fmcontentsAtPath:

@"readMe"];

if(data==nil){

NSLog(@"文件不能读取");

return1;

}elseif([fmcreateFileAtPath:

@"readMe1"contents:

dataattributes:

nil]==NO){

NSLog(@"文件不能创建");

return1;

}

NSLog(@"拷贝后的文件内容为:

");

NSLog(@"%@",[NSStringstringWithContentsOfFile:

@"readMe1"encoding:

NSUTF8StringEncodingerror:

nil]);

[poolrelease];

return0;

}

首先执行这个程序,必须保证生成的程序目录下有readMe这个文件,可以在xcode选择other创建出来,然后在里边写上:

“hello,”

“hello,”

“hello,”

结果可以看到输出:

操作目录总结

        有时需要在程序中获得临时目录来创建一些临时文件,或者从主目录中读取文件。

NSTemporaryDirectory方法就是返回临时目录。

相关方法:

P215例子

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSFileManager*fm;

NSString*fName=@"readMe.h";

NSString*path,*tempDir,*extDir,*homeDir,*fullPath;

NSString*testPath=@"~Lee/sam/lee//../readMe.h";

NSArray*dirArray;

fm=[NSFileManagerdefaultManager];

tempDir=NSTemporaryDirectory();

NSLog(@"临时文件的目录为:

%@",tempDir);

path=[fmcurrentDirectoryPath];

NSLog(@"当前的文件目录是:

%@",[pathlastPathComponent]);

fullPath=[pathstringByAppendingPathComponent:

fName];

NSLog(@"添加一个带扩展名的文件%@后的完整路径为:

%@",fName,fullPath);

extDir=[fullPathpathExtension];

NSLog(@"路径%@的扩展名是%@",fullPath,extDir);

homeDir=NSHomeDirectory();

NSLog(@"用户根目录为%@",homeDir);

dirArray=[homeDirpathComponents];

for(pathindirArray){

NSLog(@"%@",path);

}

NSLog(@"%@",[testPathstringByStandardizingPath]);

[poolrelease];

return0;

}

输出为:

文件的读写(NSFileHandle)

         有时需要更精确地处理文件中的内容,比如,每次读写文件中的几个字符。

这就需要使用NSFileHandle类。

方法有:

P217一个例子

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSFileHandle*file1,*file2;

NSData*fd;

file1=[NSFileHandlefileHandleForReadingAtPath:

@"readMe"];

if(file1==nil){

NSLog(@"打开文件进行读取操作失败!

");

return1;

}

[[NSFileManagerdefaultManager]createFileAtPath:

@"readMe1"contents:

nilattributes:

nil];

file2=[NSFileHandlefileHandleForWritingAtPath:

@"readMe1"];

if(file2==nil){

NSLog(@"打开文件进行写入操作失败");

return1;

}

[file2truncateFileAtOffset:

0];

fd=[file1readDataToEndOfFile];

[file2writeData:

fd];

NSLog(@"将文件1读取的内容写入文件2以后:

");

NSLog(@"%@",[NSStringstringWithContentsOfFile:

@"readMe1"encoding:

NSUTF8StringEncodingerror:

nil]);

[file2seekToEndOfFile];

[file2writeData:

fd];

NSLog(@"将我们的文件1的内容拷贝到文件2的末尾后:

");

NSLog(@"%@",[NSStringstringWithContentsOfFile:

@"readMe1"encoding:

NSUTF8StringEncodingerror:

nil]);

[file1closeFile];

[file2closeFile];

[poolrelease];

return0;

}

必须保证生成的程序目录下有readMe这个文件(否则会出现打开失败),可以在xcode选择other创建出来,然后在里边写上:

“hello,”

“hello,”

“hello,”

进程信息(NSProcessInfo)

        NSProcessInfo类用于获取当前正在执行的进程信息,比如,当前机器的名称、操作系统类型等,常用方法:

P220一个例子

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSProcessInfo*proc=[NSProcessInfoprocessInfo];

NSArray*args=[procarguments];

for(NSString*str1inargs){

NSLog(@"当前进程的参数为:

%@",str1);

}

NSString*pn=[procprocessName];

NSString*hn=[prochostName];

NSLog(@"当前进程的进程名为%@,进程的主机名%@",pn,hn);

NSString*osn=[procoperatingSystemName];

NSIntegeros=[procoperatingSystem];

NSString*osvs=[procoperatingSystemVersionString];

NSLog(@"当前系统的名称为:

%@操作系统代表数字为:

%li当前系统的版本号为:

%@",osn,os,osvs);

[poolrelease];

return0;

}

综合使用了NSArray、NSProcessInfo、NSCountedSet以及NSEnumerator

P221

//

//main.m

//test

//

//CreatedbyZengon13-5-24.

//Copyright(c)2013年zeng.Allrightsreserved.

//

#import

 

intmain(intargc,constchar*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSArray*arr=[[NSProcessInfoprocessInfo]arguments];

NSCountedSet*cset1=[[NSCountedSetalloc]initWithArray:

arr];

NSArray*sorted_arr=[[cset1allObjects]sortedArrayUsingSelector:

@selector(compare:

)];

NSEnumerator*enmr=[sorted_arrobjectEnumerator];

idletter;

while(letter=[enmrnextObject]){

printf("%sn",[letterUTF8String]);

}

[cset1release];

[poolrelease];

return0;

}

在控制台下执行test程序,输入几个字母,然后回车

程序使用了NSCountedSet的initWithArray方法将保存在数组中的参数,存入NSCountedSet对象中,这样的操作会去除重复的参数:

NSCountedSet*cset1=[[NSCountedSetalloc]initWithArray:

arr];

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1