日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC语言基础十:OC文件操作

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC语言基础十:OC文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 主要的類
    • NSFileManager
      • 創建文件管理類單例對象:
      • 創建目錄
        • 定義帶參宏
        • 附帶中間路徑
      • 創建文件
      • 路徑遍歷
        • 淺度遍歷
        • 深度遍歷
      • 文件移動
      • 復制操作
      • 刪除操作
      • 查看屬性
      • 查看文件是否在路徑下存在
  • NSFileHandle
    • 打開文件
      • 讀取文件
      • 寫入數據
        • 文件數據的同步
        • 光標移動
      • 關閉文件

主要的類

NSFileManager:文件管理類,當我們要去創建目錄,或者操作目錄中某些文件的時候,或者想查看某個目錄或者文件的屬性。
NSFileHandle:如果操作對象是某個文件,并在里面進行文本的編輯。

NSFileManager

創建文件管理類單例對象:

NSFileManager *fileManger=[NSFileManager defaultManager];

創建目錄

:第一個參數:文件夾目錄
第二個參數:是否附帶中間路徑,也就是在目錄之前可能生成一些中間目錄出來,YES附帶,NO不附帶,如果要在第一個參數目錄后面連續添加目錄,則必須為YES.比如:/Users/chao/Desktop/FileOperation/Test/Test1
第三個參數:目錄屬性,一般用系統默認提供給我們的,一般傳nil
第四個參數:如果目錄創建失敗,返回為什么創建失敗了,以便于我們去完成一些異常操作。是一個二級指針。
返回是一個BOOL值,也能幫助我們判斷路徑是創建成功了還是失敗了。

將文件夾拖動到xcode界面,會在文檔里自動生成該文件夾的路徑。

NSError *error=nil; BOOL ret=[fileManager createDirectoryAtPath:@"/Users/chao/Desktop/FileOperation/Test" withIntermediateDirectories:NO attributes:nil error:&error]; if(ret){NSLog(@"目錄創建成功"); }else{NSLog(@"目錄創建失敗,reason:%@",error); }

定義帶參宏

為了后續操作路徑方便,對多次使用的同一個路徑,可以寫在一個宏定義當中。首先確定變量是什么,不變的量是什么。父路徑是不變的,可變的是子路徑,到底是創建目錄呢,還是創建文件。

使用的時候,用到字符串拼接,或者格式化字符串的方法。

#import <Foundation/Foundation.h>#define kPathAtFileOperation(subpath) \[NSString stringWithFormat:@"/Users/chao/Desktop/FileOperation/%@",subpatch]//main NSError *error=nil; BOOL ret=[fileManager createDirectoryAtPath:kPathAtFileOperation(@"test") withIntermediateDirectories:NO attributes:nil error:&error]; if(ret){NSLog(@"目錄創建成功"); }else{NSLog(@"目錄創建失敗,reason:%@",error); }

附帶中間路徑

test1和test1-1之前都沒有生成過,此時第二個參數要寫成YES,如果寫成NO的話,程序不會識別中間的test1。

BOOL ret=[fileManager createDirectoryAtPath:kPathAtFileOperation(@"test1/test1-1") withIntermediateDirectories:YES attributes:nil error:&error];

創建文件

文件路徑肯定是帶 .文件類型 的。
contents參數接的是文件的內容,NSData類型,如果傳nil,那么文件內容就是空的。

當多次創建相同的文件時,會進行覆蓋操作。

NSString *string=@"文件操作"; NSData *data=[string dataUsingEncoding:NSUTF8StringEncoding]; ret=[fileManager createFileAtPath:kPathAtFileOperation(@"test.txt") contents:data attributes:nil];

路徑遍歷

淺度遍歷

第一個參數:要遍歷的路徑。返回結果是NSArray類型的,會把目錄下的所有內容全部列舉出來。隱藏文件一般都是.開頭的

NSArray *contents=[fileManager contentsOfDirectoryAtPath:@"/Users/chao/Desktop/FileOperation" error:nil];

結果:
“.DS_Store”,
test,
“test.txt”,
test1

深度遍歷

contents=[fileManager subpathsOfDirectoryAtPath:@"/Users/chao/Desktop/FileOperation" error:nil];

結果:
“.DS_Store”,
test,
“test.txt”,
test1,
“test1/.DS_Store”,
“test1/test1-1”
淺度遍歷的結果,在深度遍歷里都可以找到。文件結構中所有的節點都會掃描一遍。所以淺度效率要高一些,深度遍歷在路徑復雜的時候,耗時會久一些。

文件移動

[fileManager moveItemAtPath:kPathAtFileOperation(@"test.txt") toPath:kPathAtFileOperation(@"test/test.txt") error:nil];

復制操作

[fileManager copyItemAtPath:kPathAtFileOperation(@"test/test.txt") toPath:@"/Users/chao/Desktop/FileOperation" error:nil];

刪除操作

[fileManager removeItemAtPath:kPathAtFileOperation(@"test.txt") error:nil];

查看屬性

返回結果是字典NSDictionary類

NSDictionary *dictionary=[fileManager attributesOfItemAtPath:kPathAtFileOperation(@"test/test.txt") error:nil];

查看文件是否在路徑下存在

if(fileManager fileExistsAtPath:kPathAtFileOperation(@"test/test.txt")){NSLog(@"YES"); }else{NSLog(@"NO"); }

NSFileHandle

打開文件

只讀,不可寫:

NSFileHandle * = [NSFileHandle fileHandleForReadingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"]; NSLog(@"%@",[fileHandle readDataToEndOffFile]);//從光標的位置讀到文件末尾,如果不去操作光標位置,那么光標默認是在文件的最前面。讀出的是二進制數據,要轉換一下才能看到有意義的字符串

只寫,不可讀:

NSFileHandle * = [NSFileHandle fileHandleForWritingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"];

可讀,可寫:

NSFileHandle * = [NSFileHandle fileHandleForUpdatingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"];

讀取文件

NSLog(@"%@",[fileHandle readDataToEndOffFile]); NSLog(@"%@",[fileHandle readDataToEndOffFile]);

第二次輸出為空,因為每次去調取讀取文件相關方法的時候,都會導致光標的移動。

讀取指定長度的數據:

[fileHandle readDataOfLength:1];

寫入數據

寫入的是NSData數據。
string的dataUsingEncoding方法,字符串轉NSData

NSString *string=@"baidu.com"; [fileHandle writeData:[string dataUsingEncoding:NSUTF8StringEncoding]];

文件數據的同步

在進行了文件數據的修改后,可以手動調用synchronizeFile方法,來完成數據的同步,這是很常用的。

[fileHandle synchronizeFile];

光標移動

offset是光標的偏移量,當offset為0,光標就會設置到文件開頭。

[fileHandle seekToFileOffset:0];

關閉文件

每次打開文件,操作完成后,必須關閉文件。關閉之后就不能繼續進行操作了。

[NSFileHandle closeFile];

總結

以上是生活随笔為你收集整理的OC语言基础十:OC文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。