你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 文件操作FileManager、以及沙盒的復雜操作

文件操作FileManager、以及沙盒的復雜操作

編輯:IOS開發綜合

文件操作FileManager、以及沙盒的復雜操作 MMFileManagerUtils 概述

在我們往常的開發中,文件的操作絕對來說能夠會比擬少,但是這個東西也是需求去學習、去理解的;由於這個東西也是IOS開發中必不可少的一局部。有的時分當你對一個不是很理解的東西或許內容理解透徹的時分,內心就會有很大的滿足感,亦或許是喜悅感吧,總想分享出自己的喜悅給大家。

所以我這裡復雜的總結了一下文件存儲能夠會常用到的那塊內容。有任何缺乏或許需求增強的中央,希望多多提意見,在下感謝不盡…

團體github 團體CDSN博客首頁
大致目錄如下

/**
 *    * 一. 文件相關
 *    *
 *      1.1 在Documents文件夾上面創立一個文件(只需求傳入文件名即可)
 *      1.2 在Documents文件夾上面創立一個有內容的文件(支持寫入: NSData、NSDictionary、NSArray、NSString)
 *      1.3 創立一個全途徑文件(需求傳入文件全途徑)
 *      1.4 創立一個有內容的全途徑文件(支持寫入: NSData、NSDictionary、NSArray、NSString)
 *      1.5 刪除Documents文件夾上面的文件
 *      1.6 刪除相似於上述創立的文件
 *      1.7 文件重命名
 *    *
 *    * 二. 文件夾相關
 *    *
 *      2.1 在Documents文件夾上面創立一個文件夾
 *      2.2 創立一個全途徑的文件夾
 *      2.3 刪除Documents文件夾上面的文件夾
 *      2.4 刪除相似於上述創立的全途徑文件夾
 *      2.5 文件夾重命名
 *    *
 *    * 三. other
 *    *
 *      3.1 獲取Documents文件夾途徑
 *      3.1 獲取Cache文件夾途徑
 *      3.1 獲取Library文件夾途徑
 *      3.2 打印Documents文件夾上面的一切文件列表
 *      3.3 打印某個文件夾上面的一切文件列表
 *      3.4 判別Documents文件夾上面能否存在某個文件
 *      3.5 判別某個文件能否存在
 *    *
 */

全部源碼直接下載運用-github

在這裡創立了一個類 MMFileManagerUtils,上面代碼每一個辦法中都會有一個回調的block用來處置增、刪、改文件能否成功,以及錯誤信息的前往。

中心功用代碼:

只羅列上述目錄中的局部功用點!!!詳細的請檢查源碼。

1. 創立文件

+ (void)createFile:(NSString *)filepath completed:(void (^)(BOOL isCreated, NSError *error))complete {

    NSAssert(filepath != nil || filepath.length >= 0, @"filepath isn't to nil");

    BOOL create = NO;
    NSError *cError;
    if (![[NSFileManager defaultManager] fileExistsAtPath:filepath])
    {
        create =  [[NSFileManager defaultManager] createFileAtPath:filepath contents:nil attributes:nil];
        if (create) {
            NSLog(@"file create success at: ##-%@-##",filepath);
            cError = nil;
        }else{
            NSLog(@"file create failed at: %@",filepath);
            cError = [NSError errorWithDomain:@"NSErrorDomain" code:0 userInfo:@{@"info":[NSString stringWithFormat:@"file create failed at: %@",filepath]}];
        }
    }else{
        NSLog(@"file create failed at: %@",filepath);
        cError = [NSError errorWithDomain:@"NSErrorDomain" code:0 userInfo:@{@"info":[NSString stringWithFormat:@"file already exist at: %@",filepath]}];
    }

    if (complete) {
        complete(create,cError);
    }
}

這個是創立文件的次要代碼,可直接拷貝運用,Documents上面的創立文件的辦法+ (void)createFileAtDocuments:(NSString *)filename completed:(void (^)(BOOL isCreated, NSError *error))complete衍生自上述這個辦法,詳細見源碼github,

還有一種就是在創立文件的時分寫入一些數據,這個辦法+ (void)createFile:(NSString *)filepath withObject:(id)dataObject completed:(void (^)(BOOL isCreated, NSError *error))complete也可以自行查閱代碼

PS:需求留意的一點是,該辦法需求傳入全途徑,Documents上面只需求傳入文件名即可

2. 刪除文件

+ (void)removeFile:(NSString *)filepath completed:(void (^)(BOOL isRemoved, NSError *error))complete {

    NSAssert(filepath != nil || filepath.length >= 0, @"filepath isn't to nil");

    NSError *error;
    BOOL remove = NO;
    if ([[NSFileManager defaultManager] fileExistsAtPath:filepath]) {
        remove = [[NSFileManager defaultManager] removeItemAtPath:filepath error:&error];
    }else{
        remove = NO;
        error = [NSError errorWithDomain:@"NSErrorDomain" code:0 userInfo:@{@"info":[NSString stringWithFormat:@"file ‘%@' don't exist at  the Folder",filepath]}];
    }

    NSLog(@"file remove %@ at: ##-%@-##",remove ? @"Success" : @"Failed" ,filepath);
    if (complete) {
        complete(remove, error);
    }
}

刪除文件辦法如上。可以和刪除文件夾的辦法+ (void)removeFolder:(NSString *)folderpath completed:(void (^)(BOOL isRemoved, NSError *error))complete通用

從Documents上面刪除文件的辦法+ (void)removeFileAtDocuments:(NSString *)filename completed:(void (^)(BOOL isRemoved, NSError *error))complete也一樣,只是我這邊復雜的拼接了一下Documents文件夾途徑。

3. 重命名文件

+ (void)renameFile:(NSString *)filePath toNewFileName:(NSString *)newFileName completed:(void (^)(BOOL isRenamed, NSError *error))complete {

    NSAssert(filePath != nil || filePath.length >= 0 || newFileName, @"filepath isn't to nil or new fileName isn't to nil");

    NSString *foldername = [filePath stringByDeletingLastPathComponent];

    NSString *tmpFilepath = newFileName;
    if ([tmpFilepath hasprefix:foldername] || [tmpFilepath componentsSeparatedByString:@"/"].count > 1) {
        tmpFilepath = newFileName;
    }else{
        tmpFilepath = [foldername stringByAppendingPathComponent:newFileName];
    }

    NSError *error;
    BOOL rename = NO;
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        rename =  [[NSFileManager defaultManager] moveItemAtPath:filePath toPath:tmpFilepath error:&error];
    }else{
        rename = NO;
        error = [NSError errorWithDomain:@"NSErrorDomain" code:0 userInfo:@{@"info":[NSString stringWithFormat:@"file ‘%@' rename failed to %@,because the file isn't exist",filePath, newFileName]}];
    }

    NSLog(@"file %@ rename to %@ : %@",filePath.lastPathComponent ,newFileName, rename?@"success" : @"Failed");
    if (complete) {
        complete(rename, error);
    }

}

重命名文件,現實上是做了一個挪動的操作,將一個文件挪動到一個新文件中。

其中filePath必需為文件全途徑,newFileName;可以為新文件的名字,也可以是新文件的全途徑。

4. 創立文件夾

+ (void)createFolder:(NSString *)folderpath completed:(void (^)(BOOL isCreated, NSError *error))complete {

    NSAssert(folderpath != nil || folderpath.length >= 0, @"文件夾途徑不能為空");

    NSError *error;
    BOOL create = [[NSFileManager defaultManager] createDirectoryAtPath:folderpath withIntermediateDirectories:YES attributes:nil error:&error];
    if (create) {
        NSLog(@"folder create success at: ##-%@-##",folderpath);

    }else{
        NSLog(@"folder create failed at: %@",folderpath);
    }

    if (complete) {
        complete(create, error);
    }
}

如上,便是創立文件夾的次要代碼,可以直接運用,在Documents文件加上面創立問價夾的辦法+ (void)createFolderAtDocuments:(NSString *)foldername completed:(void (^)(BOOL isCreated, NSError *error))complete也是在其下面復雜的擴展,詳細見源碼github

5. 刪除文件夾

+ (void)removeFolder:(NSString *)folderpath completed:(void (^)(BOOL isRemoved, NSError *error))complete {

    NSAssert(folderpath != nil || folderpath.length >= 0, @"filepath isn't to nil");

    NSError *error;
    BOOL remove = NO;
    if ([[NSFileManager defaultManager] fileExistsAtPath:folderpath]) {
        remove = [[NSFileManager defaultManager] removeItemAtPath:folderpath error:&error];
    }else{
        remove = NO;
        error = [NSError errorWithDomain:@"NSErrorDomain" code:0 userInfo:@{@"info":[NSString stringWithFormat:@"Folder ‘%@' removed failed from the dir, because the folder isn't exist",folderpath]}];
    }

    if (complete) {
        complete(remove, error);
    }
}

刪除文件夾的這個辦法現實上跟刪除文件的辦法是一樣的,可以相互通用的,這裡是方便大家區分處置,以便於更明晰的運用。

Documents文件夾上面刪除文件夾的辦法+ (void)removeFolderAtDocuments:(NSString *)foldername completed:(void (^)(BOOL isRemoved, NSError *error))complete,同理。

6. 各種沙盒內目錄途徑獲取 Home目錄

NSString *homeDirectory = NSHomeDirectory();

tmp目錄(暫時數據存儲,重啟APP會肅清)

NSString *tmpDir = NSTemporaryDirectory();

Documents文件夾途徑獲取

+ (NSString *)appDocumentsPath {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

   return documentsPath;
}
Cache途徑獲取
+ (NSString *)appCachePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

    return cachePath;
}
library文件夾途徑獲取(存儲順序的默許設置或其它形態信息)
+ (NSString *)appLibraryPath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString *libraryPath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

    return libraryPath;
}
7. 打印文件夾上面的文件列表

打印出來的後果是個字符串數組,次要還是方便調試文件的一些操作進程吧。

打印Documents文件夾上面的文件列表
+ (void)printFileListWithDocuments
{
    [MMFileManagerUtils printFileListWithFolderPath:[MMFileManagerUtils appDocumentsPath]];
}
打印某個指定文件夾上面的文件列表

+ (void)printFileListWithFolderPath:(NSString *)path
{
    NSAssert(path != nil, @"path can't be nil");
    NSError *error;
    NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];
    NSLog(@"FileList in (%@):\n%@",path == nil ? DocumentsDirectory : path,[directoryContents description]);
}

【文件操作FileManager、以及沙盒的復雜操作】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved