1. 程式人生 > >檔案管理器和檔案聯結器

檔案管理器和檔案聯結器

檔案路徑path,error:預設寫nil

檔案管理器 NSFlieManager :
主要是對 檔案 進行 建立 刪除 改名 等以及檔案資訊的獲取 的操作
1、建立Manager

NSFileManager *fileManager = 【NSFileManager defaultManager】

2、建立一個檔案並寫入資料:

   -(BOOL)createFileAtPath:(NSString*)path contents:(NSData*)data attributes:(NSDictionary*)dic;

3、從一個檔案中讀取資料

  -(NSData*)contentsAtPath:(NSString*)path;

4、檔案移動

-(BOOL)moveItemAtPath:(NSString*)srcPath toPath :(NSString*)dstPath error:(NSError*)error

5、檔案的複製

-(Bool)copyItemAtPath:(NSString*)srcPath toPath:(NSString*)dstPath error:nil

6、比較兩個檔案的內容是否一樣

-(BOOL)contentsEqualAtPath: path1 andPath:path2

7、檔案是否存在
-(BOOL)fileExistsAtPath:path

8、移除檔案
-(BOOL)removeItemAtPath:path error:nil

9、建立資料夾
-(BOOL)createDirectoryAtPath: path withIntermediateDirectory

檔案聯結器 NSFileHandle : 只能對內容修改,不能對檔案
主要是對 檔案內容 進行讀取和寫入的操作
三個類的方法,建立對用操作的handle:
1、讀
+ (nullable instancetype)fileHandleForReadingAtPath:(NSString *)path;
還可以:
+ (nullable instancetype)fileHandleForReadingFromURL:(NSURL )url error:(NSError *

)error

2、寫
+ (nullable instancetype)fileHandleForWritingAtPath:(NSString *)path;
還可以:
+ (nullable instancetype)fileHandleForWritingToURL:(NSURL )url error:(NSError *)error

3、更新
+ (nullable instancetype)fileHandleForUpdatingAtPath:(NSString *)path;
還可以:
++ (nullable instancetype)fileHandleForUpdatingURL:(NSURL )url error:(NSError *)error

具體的一些:
1、返回可用的資料

-(NSData*)availableData;

2、從當前節點讀到檔案尾
-(NSData*)readDataToEndOfFlie;
3、從當前節點讀到指定長度
-(NSData*)readDataOfLength:(NSUInteger)length;
4、寫入資料
–writeData:(NSData*)data
5、獲取當前檔案的偏移量
-offsetInFile
6、跳到指定的檔案偏移量
-seekToFileOffset: offset
7、跳到檔案尾
seekToEndOfFile
8、將檔案的長度設為offset位元組
-truncateFileAtOffset:offset

具體程式碼:

//修改內容
NSFileHandle *filehandle=[NSFileHandle fileHandleForUpdatingAtPath:filePath];
//可以在一半的長度插入,但是後面的內容會被覆蓋
 //NSInteger len=[[filehandle availableData]length];
//[filehandle seekToFileOffset:len/2]; 
[filehandle seekToEndOfFile];
[filehandle writeData:[@"123" dataUsingEncoding:NSUTF8StringEncoding]];
[filehandle closeFile];
//定位資料
NSFileHandle *readFileHandle=[NSFileHandle fileHandleForReadingAtPath:filePath];
NSUInteger length=[[readFileHandle availableData] length];

[readFileHandle seekToFileOffset:length/2];
NSData *readData = [readFileHandle readDataToEndOfFile];   
NSString *readStr=[[NSString alloc]initWithData:readData encoding:NSUTF8StringEncoding];    
NSLog(@"%@",readStr);
[readFileHandle readDataOfLength:length];
//複製資料
//write 直接覆蓋原來的
NSString *filePath2=[documentPath stringByAppendingPathComponent:@"file2.txt"];
[fileManager createFileAtPath:filePath2 contents:[@"hello" dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
NSFileHandle *writeFileHandle=[NSFileHandle fileHandleForWritingAtPath:filePath2];  
[writeFileHandle writeData: readData];
[writeFileHandle closeFile];