IOS文件路径处理方法

来源:互联网 发布:双网卡路由器共享网络 编辑:程序博客网 时间:2024/05/22 14:15

常见路径处理方法:

+ (NSString *)pathWithComponentsNSArray *)components

根据components中的元素来构建路径.
- (NSArray *)pathComponents
解析路径,返回构成路径的各个部分.
- (NSString *)lastPathComponent
提取路径中的最后一个组成部分
- (NSString *)pathExtension
从路径中最后一个组成部分中提取扩展名
- (NSString *)stringByAppendingPathCom
ponentNSString *)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
修改当前进程名(谨慎使用)

复制命令实现:

[cpp] view plaincopy
  1. #import <Foundation/NSObject.h>  
  2. #import <Foundation/NSAutoreleasePool.h>  
  3. #import <Foundation/NSString.h>  
  4. #import <Foundation/NSFileManager.h>  
  5. #import <Foundation/NSArray.h>  
  6. #import <Foundation/NSPathUtilities.h>  
  7. #import <Foundation/NSProcessInfo.h>  
  8.   
  9. int main (int argc, const char * argv[]) {  
  10.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  11.   
  12.         NSFileManager *fm;  
  13.         NSString *source, *dest;  
  14.         BOOL isDir;  
  15.         NSProcessInfo *proc = [NSProcessInfo processInfo];  
  16.         //返回当前进程信息.  
  17.         NSArray *args = [proc arguments];  
  18.         //arguments方法返回一个数组,第一个元素是进程名称,其余的是命令行参数.  
  19.         fm = [[NSFileManager alloc]init];  
  20.           
  21.         if ([args count] != 3) {  
  22.                 NSLog(@"Usage: %@ src dest", [proc processName]);  
  23.                 return 1;  
  24.         }  
  25.         //测试命令行中的元素是否有3个,如果不是,打印信息,processName方法获取当前进程名.  
  26.   
  27.         source = [args objectAtIndex:1];  
  28.         dest = [args objectAtIndex:2];  
  29.         //提取返回的数组中的元素,第1个返回给source,第2个返回给dest.  
  30.           
  31.         if ([fm isReadableFileAtPath:source] == NO) {  
  32.                 NSLog(!"Can't read %@", source);  
  33.                 return 2;  
  34.         }  
  35.         //测试源文件是否可读  
  36.           
  37.         [fm fileExistsAtPath:dest isDirectory: &isDir];  
  38.         //测试目标文件是不是目录,将YES/NO存入变量isDir.  
  39.           
  40.         if (isDir == YES)   
  41.                 dest = [dest stringByAppendingPathComponent:[source lastPathComponent]];  
  42.         //如果目标是目录,则在目标路径末尾添加源文件名.  
  43.           
  44.         [fm removeItemAtPath:dest error:NULL];  
  45.         //copyItemAtPath:toPath:error:方法不允许重写文件,所以删除原有文件.  
  46.           
  47.         if ([fm copyItemAtPath:source toPath:dest error:NULL] == NO) {  
  48.                 NSLog(@"copy failed~");  
  49.                 return 3;  
  50.         }  
  51.         //如果复制不成功,返回错误信息.  
  52.           
  53.         NSLog(@"copy of %@ to %@ succeeded~ ", source, dest);  
  54.           
  55.     [pool drain];  
  56.     return 0;  
  57. }  




基本文件操作类: NSFileHandle:

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

fileHandleForWritingAtPath和fileHandleForUpdatingAtPath方法都是将偏移量设置为文件的开始,所以都是从文件开头写入(或更新模式的读取).在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
关闭文件


示例代码:

[cpp] view plaincopy
  1. #import <Foundation/NSObject.h>  
  2. #import <Foundation/NSAutoreleasePool.h>  
  3. #import <Foundation/NSString.h>  
  4. #import <Foundation/NSFileManager.h>  
  5. #import <Foundation/NSData.h>  
  6. #import <Foundation/NSFileHandle.h>  
  7.   
  8. int main (int argc, const char * argv[]) {  
  9.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  10.         NSFileHandle *infile, *outfile;  
  11.         NSData *buffer;  
  12.           
  13.         infile = [NSFileHandle fileHandleForReadingAtPath"testfile"];  
  14.         //测试testfile文件是否可读  
  15.           
  16.         if (infile == nil) {  
  17.                 NSLog(@"no read");  
  18.                 return 1;  
  19.         }  
  20.         //如果不可读,打印...  
  21.           
  22.         [infile seekToFileOffset:12];  
  23.         //截取第12个字符之后的内容.  
  24.           
  25.         [[[NSFileManager alloc]init]createFileAtPath"testout" contents:nil attributes:nil];  
  26.         //使用NSFileManager类创建文件testout,用于接受复制.  
  27.           
  28.         outfile = [NSFileHandle fileHandleForWritingAtPath"testout"];  
  29.         //测试testout文件是否可写  
  30.           
  31.         if (outfile == nil) {  
  32.                 NSLog(@"no writing");  
  33.                 return 2;  
  34.         }  
  35.         //如果不可写,打印  
  36.           
  37.         [outfile truncateFileAtOffset:0];  
  38.         //将文件长度设置为0  
  39.           
  40.         buffer = [infile readDataToEndOfFile];  
  41.         //读取infile文件中的数据保存进buffer.  
  42.           
  43.         [outfile writeData:buffer];  
  44.         //将buffer的内容写入testout文件  
  45.           
  46.         [infile closeFile];  
  47.         [outfile closeFile];  
  48.         //关闭文件  
  49.           
  50.         NSLog(@"%@",[NSString stringWithContentsOfFile"testout" encoding:NSUTF8StringEncoding error:nil]);  
  51.         //打印testout文件内容  
  52.           
  53.     [pool drain];  
  54.     return 0;  
  55. }  

0 0
原创粉丝点击