ios 目录 路径 问题

最近刚学习ios开发,最ios的目录以及文件操作不熟,看到网上有这么一篇文章,就转过来看看,也和大家分享一下!

本文转自  http://hi.baidu.com/yi_mark/item/c694a80f49f3c9c3905718b4


常用路径处理方法:
(NSString *)pathWithComponents:(NSArray *)components
根据components中的元素来构建路径.
(NSArray *)pathComponents
解析路径,返回构成路径的各个部分.
(NSString *)lastPathComponent
提取路径中的最后一个组成部分
(NSString *)pathExtension
从路径中最后一个组成部分中提取扩展名
(NSString *)stringByAppendingPathComponent:(NSString *)path
将path添加到现有路径末尾
(NSString *)stringByAppendingPathExtension:(NSString *)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
);
用户查找特定的目录,如: NSDocumentationDirectoryNSUserDirectory等等


复制文件和使用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)setProcessName:(NSString *)name
修改当前进程名(谨慎使用)

复制命令实现:

#import 
#import 
#import 
#import 
#import 
#import 
#import 

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.

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

常用的NSFileHandle方法:

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

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

(id)fileHandleForUpdatingAtPath:(NSString *)path
打开一个文件准备更新(读取和写入)

(NSData *)availableData
从设备或者通道返回可用的数据

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

(NSData *)readDataOfLength:(NSUInteger)length
从文件读取指定字节数的内容

(void)writeData:(NSData *)data
将data写入文件

(unsigned long long)offsetInFile
获取当前文件的偏移量

(void)seekToFileOffset:(unsigned long long)offset
设置当前文件的偏移量

(unsigned long long)seekToEndOfFile
将当前文件的偏移量定位到文件的末尾

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

(void)closeFile
关闭文件


#import 
#import 
#import 
#import 
#import 
#import 

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值