沙盒(SandBox)、文件操作

IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程序只能在為該應用創建的文件夾內讀取文件,不可以訪問其他地方的內容。所有的非代碼文件都保存在這個地方,比如圖片、聲音、屬性列表和文本文件等。

  • MyApp.app

儲存內容: 目錄包含了應用程序本身的數據,包含資源文件和可執行文件。整個目錄是只讀的,防止被篡改,,應用被安裝時會將該目錄簽名。
是否會被iTunes同步:

  • Documents

儲存內容:存放不可再生數據文件
是否會被iTunes同步:

  • Documents/Inbox

儲存數據:用來保存由外部應用請求當前應用程序打開的文件。例如:現有一個應用book.app可以打開txt格式的文件,而在另一個應用BookShop.app有一個a.txt的文件需要用book.app打開,但沙盒機制不允許book直接訪問BookShop的沙盒中文件,所以蘋果的解決辦法是講BookShop中的a.txt文件拷貝到book中的Documents/Inbox下,再讓book打開a.txt。
是否會被iTunes同步:

  • Library

儲存內容:建議存放默認數據或其他狀態信息。
是否會被iTunes同步: 是(不包括Caches子目錄)

  • Library/Caches

儲存內容:主要儲存緩存文件,使用過程中的緩存文件可以儲存在這里。用于保存可再生文件。比如網絡請求,但一般應用程序要負責清理這些數據。
是否會被iTunes同步:

  • Library/Preferences

儲存內容:儲存應用的偏好設置文件,一般我們使用NSUserDefaules寫的數據都會存在這個文件的plist文件中。
是否會被iTunes同步:

  • tmp

儲存內容:各種臨時文件,保證再次啟動不需要的文件,當應用不再需要這些文件時應該主動將其刪除,因為隨時可能被系統清理。
是否會被iTunes同步:

獲取目錄

    //獲取根目錄
    NSString *homePath = NSHomeDirectory();
    NSLog(@"\n根目錄:%@",homePath);

    //獲取documents目錄
    NSString *docmentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"\n獲取Documents目錄:%@",docmentPath);
    //另一種方式
    NSURL *documentURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
    NSLog(@"\n獲取Documents目錄%@",documentURL);

    //獲取Librarys
    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"\n獲取Libray目錄:%@",libraryPath);
    //同樣另一種方式
    NSURL *libraryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] firstObject];
    NSLog(@"\n獲取Libray目錄:%@",libraryURL);

    //獲取Cache目錄
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"\n獲取Cache目錄:%@",cachePath);
    NSURL *cacheURL = [[[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask]firstObject];
    NSLog(@"\n獲取Cache目錄:%@",cacheURL);

    //temp目錄
    NSString *tempPath = NSTemporaryDirectory();
    NSLog(@"temp目錄:%@",tempPath);

目錄查找

NSApplicationDirectory = 1,             // 到applications (Applications)目錄下
 NSDemoApplicationDirectory,             // 到Applications/Demos目錄下
 NSDeveloperApplicationDirectory,        // 到Developer/Applications目錄下.
 NSAdminApplicationDirectory,            // 到Applications/Utilities目錄下
 NSLibraryDirectory,                     // 到Library目錄下
 NSDeveloperDirectory,                   // 到Developer目錄下.
 NSUserDirectory,                        // 到用戶的主目錄下
 NSDocumentationDirectory,               // 到documentation (Documentation)的目錄下
 NSDocumentDirectory,                    // 到documents (Documents)目錄下
 NSCoreServiceDirectory,                 // CoreServices目錄的位置 (System/Library/CoreServices)
 NSAutosavedInformationDirectory         // 自動保存的文檔位置 (Documents/Autosaved)
 NSDesktopDirectory = 12,                // 本地用戶的桌面
 NSCachesDirectory = 13,                 // 本地緩沖區目錄(Library/Caches)
 NSApplicationSupportDirectory           // 本地應用支持文件目錄 (plug-ins, etc) (Library/Application Support)
 NSDownloadsDirectory                    // 本地下載downloads目錄
 NSInputMethodsDirectory                 // 輸入方法目錄 (Library/Input Methods)
 NSMoviesDirectory                       // 電影目錄 (~/Movies)
 NSMusicDirectory                        // 音樂目錄 (~/Music)
 NSPicturesDirectory                     // 圖片目錄 (~/Pictures)
 NSPrinterDescriptionDirectory           // PPDs目錄 (Library/Printers/PPDs)
 NSSharedPublicDirectory                 // 本地用戶分享目錄 (~/Public)
 NSPreferencePanesDirectory              // PreferencePanes目錄的位置使用系統的偏好設置 (Library/PreferencePanes)
 NSApplicationScriptsDirectory           // 本地用戶 scripts 文件夾,對于所需的應用(~/Library/Application Scripts/code-signing-id)
 NSItemReplacementDirectory              // For use with NSFileManager's URLForDirectory:inDomain:appropriateForURL:create:error:
 NSAllApplicationsDirectory = 100,       // 應用能夠發生的所有路徑
 NSAllLibrariesDirectory = 101,          //資源可以發生的所有目錄
 NSTrashDirectory                        // 垃圾存放目錄

查找的區域:

 NSUserDomainMask = 1,       // 用戶的主目錄
 NSLocalDomainMask = 2,      // 當前機器的本地目錄
 NSNetworkDomainMask = 4,    // 在網絡中公開可用的位置
 NSSystemDomainMask = 8,     // 被蘋果系統提供的,不可更改的位置 (/System)
 NSAllDomainsMask = 0x0ffff  // 上述所有及未來的位置

文件操作

    1、在指定URL創建文件
    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager createDirectoryAtURL:createURL withIntermediateDirectories:YES attributes:nil error:&error];
    //在指定目錄下創建某data的文件
    [fileManager createFileAtPath:[fileURL path] contents:data attributes:nil];
  
    2、將某個目錄下的文件夾copy到指定目錄
    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    //判斷路徑是否存在,如果存在就刪除
    if ([fileManager fileExistsAtPath:[toURL path]]) {
        [fileManager removeItemAtURL:toURL error:&error];
    }
    [fileManager copyItemAtURL:folderUrl toURL:toURL error:&error];
    3、刪除指定路徑
    NSError * error;
    NSFileManager * fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:[floderURL path]]) {
        [fileManager removeItemAtURL:floderURL error:&error];
    }
    


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容