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];
}