iOS開發(fā)之NSFileManager的使用注意

前言瞎扯

我們?cè)谧鲰?xiàng)目過程中難免會(huì)接觸到存儲(chǔ)文件這種操作叁丧,那么必然會(huì)和NSFileManager發(fā)生關(guān)系(你們想歪了剪撬,真邪惡~~~)

代碼預(yù)覽

那先貼一下代碼吧:
1>這個(gè)是直接給一個(gè)目錄,一般用在將文件輸出到桌面上好查看會(huì)直接這樣用:

NSFileManager *fileManager = [NSFileManager defaultManager];
//查找目錄漓穿,如果沒有就創(chuàng)建一個(gè)目錄
if (![fileManager fileExistsAtPath:path]) {
    //BOOL isSuccess = [fileManager createFileAtPath: path contents:nil attributes:nil];
    NSError *error = nil;
    BOOL isSuccess = [fileManager createDirectoryAtPath: path withIntermediateDirectories:YES attributes:nil error:&error];
    NSLog(@"error = %@",error);
    NSLog(@"isSiccess = %d",isSuccess);
}
NSString *filePath = [NSString stringWithFormat:@"%@/helloword.txt",path ];
NSLog(@"filePath = %@",filePath);
NSError *error = nil;
BOOL isSuccess = [file writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (isSuccess && error == nil) {
    NSLog(@"存儲(chǔ)成功!W⒂晃危!");
}else{
    NSLog(@"error = %@",error);
    NSLog(@"存儲(chǔ)失敗@峡汀A欧埂!");
}

PS: 注釋掉的這個(gè)方法如果path是文件路徑就創(chuàng)建胧砰,如果path是一個(gè)目錄鳍鸵,判定沒有的話就調(diào)用下面這句話創(chuàng)建目錄

//創(chuàng)建文件
BOOL isSuccess = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
//創(chuàng)建目錄
BOOL isSuccess = [fileManager createDirectoryAtPath:newDir withIntermediateDirectories:YES attributes:nil error:&error];

PS: 創(chuàng)建目錄是可以傳一個(gè)error進(jìn)去的,這樣如果報(bào)錯(cuò)是可以看error的

2>如果是存儲(chǔ)在手機(jī)上尉间,一般會(huì)這么做:

NSFileManager *fileManager = [NSFileManager defaultManager];
//創(chuàng)建document路徑
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];    
NSString *filePath = [NSString stringWithFormat:@"%@/helloword.txt",path];    
//查找文件偿乖,如果沒有就創(chuàng)建一個(gè)文件
if (![fileManager fileExistsAtPath: filePath]) {
    BOOL isSuccess = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
    NSLog(@"isSiccess = %d",isSuccess);
}
NSError *error = nil;
BOOL isSuccess = [file writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (isSuccess && error == nil) {
    NSLog(@"存儲(chǔ)成功!U艹啊贪薪!");
}else{
    NSLog(@"error = %@",error);
    NSLog(@"存儲(chǔ)失敗C吒薄;小!");
}

錯(cuò)誤解決

1>報(bào)錯(cuò)如下:
主要報(bào)錯(cuò):

"Operation not permitted"

詳細(xì)報(bào)錯(cuò):

filePath = /Users/KODIE/Desktop/JunkCode/KODOjljwfFyvdxgObject.m
2017-08-17 14:07:51.139040+0800 KODJunkCodeCreateDemo[12477:6111819] error = Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “KODOjljwfFyvdxgObject.m” in the folder “JunkCode”." UserInfo={NSFilePath=/Users/KODIE/Desktop/JunkCode/KODOjljwfFyvdxgObject.m, NSUnderlyingError=0x170443a50 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

PS: 這個(gè)是沒有權(quán)限在該路徑下創(chuàng)建文件囱怕,這個(gè)問題發(fā)生的原因是我平常喜歡用模擬器來調(diào)試霍弹,會(huì)把文件寫在桌面上,但是呢由于今天不知道怎么回事開了模擬器就卡死了娃弓,所以我就用真機(jī)跑了典格,但是沒有注意到只有模擬器才能把文件寫到桌面上或者說電腦上,所以我一直也找不到什么原因忘闻,后面Google百度了好久查的煩了冷靜的想了下才知道钝计,咳,有時(shí)候也不要盲目搜啊...

2>報(bào)錯(cuò)如下:
主要報(bào)錯(cuò):

"No such file or directory"

詳細(xì)報(bào)錯(cuò):

Error Domain=NSCocoaErrorDomain Code=4 "The folder “KODKxqugQqqwcObject.m” doesn’t exist." UserInfo={NSFilePath=/Users/KODIE/Desktop/JunkCode/KODKxqugQqqwcObject.m, NSUserStringVariant=Folder, NSUnderlyingError=0x60000024e820 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

PS: 這個(gè)是寫文件的時(shí)候保存的時(shí)候沒有創(chuàng)建目錄齐佳,就是說寫文件的時(shí)·候目錄沒有創(chuàng)建私恬,主要是用了以下直接判斷文件,而并不是判斷目錄創(chuàng)建目錄,解決辦法是用下面的代碼改成判斷文件所在的目錄有沒有創(chuàng)建,沒有就創(chuàng)建:

if (![fileManager fileExistsAtPath: filePath]) {
    BOOL isSuccess = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
    NSLog(@"isSiccess = %d",isSuccess);
}

3>報(bào)錯(cuò)如下:
主要報(bào)錯(cuò):

"Is a directory"

詳細(xì)報(bào)錯(cuò):

Error Domain=NSCocoaErrorDomain Code=512 "The file “KODOhwalUlwxsrObject.h” couldn’t be saved in the folder “JunkCode”." UserInfo={NSFilePath=/Users/KODIE/Desktop/JunkCode/KODOhwalUlwxsrObject.h, NSUnderlyingError=0x608000053ec0 {Error Domain=NSPOSIXErrorDomain Code=21 "Is a directory"}}

PS: 寫文件的時(shí)候炼吴,這是一個(gè)目錄并不是一個(gè)文件本鸣,可能調(diào)用錯(cuò)了方法,這個(gè)很有可能是因?yàn)槲覀儼盐募窂疆?dāng)成是目錄路徑來判斷了,所以直接創(chuàng)建了一個(gè)目錄硅蹦,可能調(diào)用的方法是如下但是path卻是文件路徑:

if (![fileManager fileExistsAtPath:path]) {
    NSError *error = nil;
    BOOL isSuccess = [fileManager createDirectoryAtPath: path withIntermediateDirectories:YES attributes:nil error:&error];
    NSLog(@"error = %@",error);
    NSLog(@"isSiccess = %d",isSuccess);
}

使用建議

在使用的過程中我建議是這樣的荣德,先把文件所需要在的路徑判斷一下是否有這個(gè)目錄存在闷煤,如果不存在創(chuàng)建這個(gè)目錄(這個(gè)目錄是可以創(chuàng)建多級(jí)的),然后我們?cè)賹懭氲铰窂较碌奈募锶ヤ陶埃@樣不會(huì)有錯(cuò)的鲤拿。

NSString *dirPath = @"/Users/你的電腦名/Desktop/HelloWord";
NSString *filePath = [NSString stringWithFormat:@"%@//helloword.txt",dirPath];
NSLog(@"filePath = %@",filePath);
    
NSFileManager *fileManager = [NSFileManager defaultManager];
//查找目錄,如果沒有就創(chuàng)建一個(gè)目錄
if (![fileManager fileExistsAtPath: dirPath]) {
    NSError *error = nil;
    BOOL isSuccess = [fileManager createDirectoryAtPath: dirPath withIntermediateDirectories:YES attributes:nil error:&error];
    NSLog(@"error = %@",error);
    NSLog(@"isSiccess = %d",isSuccess);
}
    
NSError *error = nil;
BOOL isSuccess = [file writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (isSuccess && error == nil) {
    NSLog(@"存儲(chǔ)成功J鹧省=辍!");
}else{
    NSLog(@"error = %@",error);
    NSLog(@"存儲(chǔ)失斈瘛V仙!慕匠!");
}

文末推薦

iOS開發(fā)之沙盒文件操作 | iOS開發(fā) - CocoaChina

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饱须,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子台谊,更是在濱河造成了極大的恐慌蓉媳,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅铅,死亡現(xiàn)場(chǎng)離奇詭異督怜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狠角,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門号杠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丰歌,你說我怎么就攤上這事姨蟋。” “怎么了立帖?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵眼溶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我晓勇,道長(zhǎng)堂飞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任绑咱,我火速辦了婚禮绰筛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘描融。我一直安慰自己铝噩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布窿克。 她就那樣靜靜地躺著骏庸,像睡著了一般毛甲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具被,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天玻募,我揣著相機(jī)與錄音,去河邊找鬼一姿。 笑死补箍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啸蜜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼辈挂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼衬横!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起终蒂,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蜂林,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拇泣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噪叙,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年霉翔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睁蕾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡债朵,死狀恐怖子眶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情序芦,我是刑警寧澤臭杰,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站谚中,受9級(jí)特大地震影響渴杆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宪塔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一磁奖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧某筐,春花似錦点寥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔽莱。三九已至,卻和暖如春戚长,著一層夾襖步出監(jiān)牢的瞬間盗冷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工同廉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仪糖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓迫肖,卻偏偏與公主長(zhǎng)得像锅劝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蟆湖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容