IOS文件路径处理方法

108 篇文章 1 订阅


+ (NSString *)pathWithComponentsNSArray *)components

根据components中的元素来构建路径.

- (NSArray *)pathComponents

解析路径,返回构成路径的各个部分.

- (NSString *)lastPathComponent

提取路径中的最后一个组成部分

- (NSString *)pathExtension

从路径中最后一个组成部分中提取扩展名

- (NSString *)stringByAppendingPathComponentNSString *)path

path添加到现有路径末尾

- (NSString *)stringByAppendingPathExtensionNSString *)ext

将指定的扩展名添加到现有路径的最后一个组成部分上

- (NSString *)stringByDeletingLastPathComponent

删除路径中的最后一个组成部分

- (NSString *)stringByDeletingPathExtension

从文件的最后一部分删除扩展名

- (NSString *)stringByExpandingTildeInPath

将路径中的代字符扩展成用户主目录(~)或指定用户的主目录(~user)

- (NSString *)stringByResolvingSymlinksInPath

尝试解析路径中的符号链接

- (NSString *)stringByStandardizingPath

解析路径中的~,(..)父目录,(.)当前目录和符号链接来标准化路径.


常用的路径工具函数:

NSString * NSUserName (void);

返回当前用户的登录名

NSString * NSFullUserName (void);

返回当前用户的完整用户名

NSString * NSHomeDirectory (void);

返回当前用户主目录的路径

NSString * NSHomeDirectoryForUser ( NSString *userName)

返回用户userName的主目录


NSString * NSTemporaryDirectory (void);

返回可用于创建临时文件的路径目录


NSArray * NSSearchPathForDirectoriesInDomains (

   NSSearchPathDirectory directory,

   NSSearchPathDomainMask domainMask,

   BOOL expandTilde

);

用户查找特定的目录,: NSDocumentationDirectory, NSUserDirectory等等



复制文件和使用NSProcessInfo


常用的NSProcessInfo


+ (NSProcessInfo *)processInfo

返回当前进程信息


- (NSArray *)arguments

NSString对象数字的形式返回当前进程的参数


- (NSDictionary *)environment

返回变量/值对字典,以描述当前的环境变量(比如PATH等等)


- (int)processIdentifier

返回进程PID


- (NSString *)processName

返回当前正在执行的进程名称


- (NSString *)globallyUniqueString

每次调用该方法时,都会返回不同的单值字符串,可以生成临时文件名


- (NSString *)hostName

返回主机系统名


- (NSUInteger)operatingSystem

返回表示操作系统的数字


- (NSString *)operatingSystemName

返回操作系统的名称


- (NSString *)operatingSystemVersionString

返回操作系统版本


- (void)setProcessNameNSString *)name

修改当前进程名(谨慎使用)


复制命令实现:


#import <Foundation/NSObject.h>

#import <Foundation/NSAutoreleasePool.h>

#import <Foundation/NSString.h>

#import <Foundation/NSFileManager.h>

#import <Foundation/NSArray.h>

#import <Foundation/NSPathUtilities.h>

#import <Foundation/NSProcessInfo.h>


int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


        NSFileManager *fm;

        NSString *source, *dest;

        BOOL isDir;

        NSProcessInfo *proc = [NSProcessInfo processInfo];

        //返回当前进程信息.

        NSArray *args = [proc arguments];

        //arguments方法返回一个数组,第一个元素是进程名称,其余的是命令行参数.

        fm = [[NSFileManager alloc]init];

        

        if ([args count] != 3) {

                NSLog(@"Usage: %@ src dest", [proc processName]);

                return 1;

        }

        //测试命令行中的元素是否有3,如果不是,打印信息,processName方法获取当前进程名.


        source = [args objectAtIndex:1];

        dest = [args objectAtIndex:2];

        //提取返回的数组中的元素,1个返回给source,2个返回给dest.

        

        if ([fm isReadableFileAtPath:source] == NO) {

                NSLog(!"Can't read %@", source);

                return 2;

        }

        //测试源文件是否可读

        

        [fm fileExistsAtPath:dest isDirectory: &isDir];

        //测试目标文件是不是目录,YES/NO存入变量isDir.

        

        if (isDir == YES) 

                dest = [dest stringByAppendingPathComponent:[source lastPathComponent]];

        //如果目标是目录,则在目标路径末尾添加源文件名.

        

        [fm removeItemAtPath:dest error:NULL];

        //copyItemAtPath:toPath:error:方法不允许重写文件,所以删除原有文件.

        

        if ([fm copyItemAtPath:source toPath:dest error:NULL] == NO) {

                NSLog(@"copy failed~");

                return 3;

        }

        //如果复制不成功,返回错误信息.

        

        NSLog(@"copy of %@ to %@ succeeded~ ", source, dest);

        

    [pool drain];

    return 0;

}



基本文件操作类: NSFileHandle


NSFileHandle类没有提供创建文件的方法,所以要创建文件需要使用FileManager方法来创建, NSFileHandle类中的文件操作方法都是假定文件都是存在的,如果不存在,则返回nil.


fileHandleForWritingAtPathfileHandleForUpdatingAtPath方法都是将偏移量设置为文件的开始,所以都是从文件开头写入(或更新模式的读取).UNIX编程中,打开用于读取的文件不要截断.


常用的NSFileHandle方法:


+ (id)fileHandleForReadingAtPathNSString *)path

打开一个文件准备读取


+ (id)fileHandleForWritingAtPathNSString *)path

打开一个文件准备写入


+ (id)fileHandleForUpdatingAtPathNSString *)path

打开一个文件准备更新(读取和写入)


- (NSData *)availableData

从设备或者通道返回可用的数据


- (NSData *)readDataToEndOfFile

读取其余的数据直到文件的末尾(最大值为无符号整形的最大值)


- (NSData *)readDataOfLengthNSUInteger)length

从文件读取指定字节数的内容


- (void)writeDataNSData *)data

data写入文件


- (unsigned long long)offsetInFile

获取当前文件的偏移量


- (void)seekToFileOffsetunsigned long long)offset

设置当前文件的偏移量


- (unsigned long long)seekToEndOfFile

将当前文件的偏移量定位到文件的末尾


- (void)truncateFileAtOffset:(unsigned long long)offset

将文件的长度设置为offset字节(如需要,可填充内容)


- (void)closeFile

关闭文件



#import <Foundation/NSObject.h>

#import <Foundation/NSAutoreleasePool.h>

#import <Foundation/NSString.h>

#import <Foundation/NSFileManager.h>

#import <Foundation/NSData.h>

#import <Foundation/NSFileHandle.h>


int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

        NSFileHandle *infile, *outfile;

        NSData *buffer;

        

        infile = [NSFileHandle fileHandleForReadingAtPath"testfile"];

        //测试testfile文件是否可读

        

        if (infile == nil) {

                NSLog(@"no read");

                return 1;

        }

        //如果不可读,打印...

        

        [infile seekToFileOffset:12];

        //截取第12个字符之后的内容.

        

        [[[NSFileManager alloc]init]createFileAtPath"testout" contents:nil attributes:nil];

        //使用NSFileManager类创建文件testout,用于接受复制.

        

        outfile = [NSFileHandle fileHandleForWritingAtPath"testout"];

        //测试testout文件是否可写

        

        if (outfile == nil) {

                NSLog(@"no writing");

                return 2;

        }

        //如果不可写,打印

        

        [outfile truncateFileAtOffset:0];

        //将文件长度设置为0

        

        buffer = [infile readDataToEndOfFile];

        //读取infile文件中的数据保存进buffer.

        

        [outfile writeData:buffer];

        //buffer的内容写入testout文件

        

        [infile closeFile];

        [outfile closeFile];

        //关闭文件

        

        NSLog(@"%@",[NSString stringWithContentsOfFile"testout" encoding:NSUTF8StringEncoding error:nil]);

        //打印testout文件内容

        

    [pool drain];

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值