想了解沙盒星澳?看我就夠了!

iOS應用程序只能在為該改程序創(chuàng)建的文件系統(tǒng)中讀取文件旱易,不可以去其它地方訪問禁偎,此區(qū)域被成為沙盒腿堤,所以所有的非代碼文件都要保存在此,例如圖像如暖,圖標笆檀,聲音,映像盒至,屬性列表酗洒,文本文件等。


沙盒文件的目錄結構:

  • Documents

  • Library

    • Caches

    • Preferences

  • tmp


沙盒下各文件夾保存內容的區(qū)別

  • Documents:保存應用運行時生成的需要持久化的數(shù)據(jù)枷遂,iTunes同步設備時會備份該目錄樱衷。例如,游戲應用可以將游戲存檔保存在該目錄下酒唉。如果用戶將緩存存放在這個文件夾下箫老,會導致應用審核無法通過。
  • tmp:保存應用運行時所需要的臨時數(shù)據(jù),使用完畢后再將相應的文件從該目錄刪除黔州。應用沒有運行時耍鬓,系統(tǒng)也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄流妻。
  • Library/Caches:保存應用運行時生成的需要持久化的數(shù)據(jù)牲蜀,iTunes同步設備時不會備份該目錄。一般存儲體積大绅这,不需要備份的非重要數(shù)據(jù)涣达。
  • Library/Preference:保存應用的所有偏好設置,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息证薇。iTunes同步設備時會備份該目錄度苔。


獲取程序的Home目錄

NSString *homeDirectory = NSHomeDirectory();
NSLog(@"path:%@", homeDirectory);


獲取document目錄

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];


獲取Cache目錄

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];


獲取Library目錄

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];


獲取Tmp目錄

NSString *tmpDir = NSTemporaryDirectory();
NSLog(@"%@", tmpDir);


創(chuàng)建文件夾

-(void)createDirectory{
    NSString *documentsPath =[self getDocumentsPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *iOSDirectory = [documentsPath stringByAppendingPathComponent:@"/iOS"];
    BOOL isSuccess = [fileManager createDirectoryAtPath:iOSDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    if (isSuccess) {
        NSLog(@"success");
    } else {
        NSLog(@"fail");
    }
}


創(chuàng)建文件

-(void)createFile{
    NSString *documentsPath =[self getDocumentsPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    BOOL isSuccess = [fileManager createFileAtPath:iOSPath contents:nil attributes:nil];
    if (isSuccess) {
        NSLog(@"success");
    } else {
        NSLog(@"fail");
    }
}


寫文件

-(void)writeFile{
    NSString *documentsPath =[self getDocumentsPath];
    NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    NSString *content = @"我要寫數(shù)據(jù)啦";
    BOOL isSuccess = [content writeToFile:iOSPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    if (isSuccess) {
        NSLog(@"write success");
    } else {
        NSLog(@"write fail");
    }
}
NSString * fileName = @"testFileNSFileManager.txt";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//獲取文件路徑
NSString *path = [documentsDirectory stringByAppendingPathComponent:fileName];
//待寫入的數(shù)據(jù)
NSString *temp = @"nihao 世界";
int dataInt = 1234;
float dataFloat = 3.14f;
//創(chuàng)建數(shù)據(jù)緩沖
NSMutableData *writer = [[NSMutableData alloc] init];
//將字符串添加到緩沖中
[writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]];
//將其他數(shù)據(jù)添加到緩沖中
[writer appendBytes:&dataInt length:sizeof(dataInt)];
[writer appendBytes:&dataFloat length:sizeof(dataFloat)];
//將緩沖的數(shù)據(jù)寫入到文件中
[writer writeToFile:path atomically:YES];


讀取文件內容

-(void)readFileContent{
    NSString *documentsPath =[self getDocumentsPath];
    NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    NSString *content = [NSString stringWithContentsOfFile:iOSPath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"read success: %@",content);
}
//讀取數(shù)據(jù):
int intData;
float floatData = 0.0;
NSString *stringData;

NSData *reader = [NSData dataWithContentsOfFile:path];
stringData = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]
                                   encoding:NSUTF8StringEncoding];
[reader getBytes:&intData range:NSMakeRange([temp length], sizeof(intData))];
[reader getBytes:&floatData range:NSMakeRange([temp length] + sizeof(intData), sizeof(floatData))];
NSLog(@"stringData:%@ intData:%d floatData:%f", stringData, intData, floatData);


判斷文件是否存在

- (BOOL)isSxistAtPath:(NSString *)filePath{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isExist = [fileManager fileExistsAtPath:filePath];
    return isExist;
}


計算文件大小

- (unsigned long long)fileSizeAtPath:(NSString *)filePath{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isExist = [fileManager fileExistsAtPath:filePath];
    if (isExist){
        unsigned long long fileSize = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
        return fileSize;
    } else {
        NSLog(@"file is not exist");
        return 0;
    }
}


計算整個文件夾中所有文件大小

- (unsigned long long)folderSizeAtPath:(NSString*)folderPath{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isExist = [fileManager fileExistsAtPath:folderPath];
    if (isExist){
        NSEnumerator *childFileEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];
        unsigned long long folderSize = 0;
        NSString *fileName = @"";
        while ((fileName = [childFileEnumerator nextObject]) != nil){
            NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
            folderSize += [self fileSizeAtPath:fileAbsolutePath];
        }
        return folderSize / (1024.0 * 1024.0);
    } else {
        NSLog(@"file is not exist");
        return 0;
    }
}


刪除文件

-(void)deleteFile{
    NSString *documentsPath =[self getDocumentsPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    BOOL isSuccess = [fileManager removeItemAtPath:iOSPath error:nil];
    if (isSuccess) {
        NSLog(@"delete success");
    }else{
        NSLog(@"delete fail");
    }
}


移動文件

- (void)moveFileName
{
    NSString *documentsPath =[self getDocumentsPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    NSString *moveToPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    BOOL isSuccess = [fileManager moveItemAtPath:filePath toPath:moveToPath error:nil];
    if (isSuccess) {
        NSLog(@"rename success");
    }else{
        NSLog(@"rename fail");
    }
}


重命名

- (void)renameFileName
{
    //通過移動該文件對文件重命名
    NSString *documentsPath =[self getDocumentsPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
    NSString *moveToPath = [documentsPath stringByAppendingPathComponent:@"rename.txt"];
    BOOL isSuccess = [fileManager moveItemAtPath:filePath toPath:moveToPath error:nil];
    if (isSuccess) {
        NSLog(@"rename success");
    }else{
        NSLog(@"rename fail");
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市浑度,隨后出現(xiàn)的幾起案子寇窑,更是在濱河造成了極大的恐慌,老刑警劉巖箩张,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甩骏,死亡現(xiàn)場離奇詭異,居然都是意外死亡先慷,警方通過查閱死者的電腦和手機饮笛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论熙,“玉大人福青,你說我怎么就攤上這事。” “怎么了无午?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵二蓝,是天一觀的道長。 經(jīng)常有香客問我指厌,道長刊愚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任踩验,我火速辦了婚禮鸥诽,結果婚禮上,老公的妹妹穿的比我還像新娘箕憾。我一直安慰自己牡借,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布袭异。 她就那樣靜靜地躺著钠龙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪御铃。 梳的紋絲不亂的頭發(fā)上碴里,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音上真,去河邊找鬼咬腋。 笑死,一個胖子當著我的面吹牛睡互,可吹牛的內容都是我干的根竿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼就珠,長吁一口氣:“原來是場噩夢啊……” “哼寇壳!你這毒婦竟也來了?” 一聲冷哼從身側響起妻怎,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壳炎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹂季,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冕广,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡疏日,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年偿洁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟优。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涕滋,死狀恐怖,靈堂內的尸體忽然破棺而出挠阁,到底是詐尸還是另有隱情宾肺,我是刑警寧澤溯饵,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站锨用,受9級特大地震影響丰刊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜增拥,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一啄巧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掌栅,春花似錦秩仆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晌缘,卻和暖如春齐莲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磷箕。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工铅搓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搀捷。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓星掰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嫩舟。 傳聞我的和親對象是個殘疾皇子氢烘,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 1、 沙盒概念基本介紹 iOS 應用程序只能在該 app 的文件系統(tǒng)中讀取家厌。這個默認的 app 文件系統(tǒng)就是我們說...
    Laughingg閱讀 2,655評論 2 10
  • 原文地址:http://blog.csdn.net/wzzvictory/article/details/1826...
    Loki_閱讀 1,008評論 0 0
  • 每個iOS應用都有自己的應用沙盒(應用沙盒就是文件系統(tǒng)目錄)播玖,與其他文件系統(tǒng)隔離。應用必須待在自己的沙盒里饭于,其他應...
    彬至睢陽閱讀 652評論 0 0
  • 我是個驕傲的女子蜀踏。 游走在這個獨我的繁華世界里。 肆意地歌唱掰吕。奔跑果覆。凝望。冥想殖熟。 急切而慌亂地宣泄著我的癲狂局待。 美...
    婷叔閱讀 385評論 0 0