1. 程式人生 > >iPhone開發之沙盒路徑的獲取

iPhone開發之沙盒路徑的獲取

1、沙盒機制以及獲取沙盒路徑
2、沙盒的基本概念和作用
每個IOS程式都有自己的應用沙盒,應用沙盒就是檔案系統目錄,與其它應用的檔案系統相隔離。IOS系統不允許訪問其他應用的應用沙盒。在IOS8中已經開放訪問。
3、即IOS8中允許沙盒目錄中的一部分東西讓其它軟體訪問。
4、應用沙盒一般包括以下幾個檔案目錄:應用程式包、Documents、Library(下面有Caches和Preferences目錄)、temp

應用程式包:包含所有的資原始檔和可執行檔案
Documents:儲存應用執行時生成的需要持久化的資料,iTunes會自動備份該目錄。蘋果建議將程式中建立的或在程式中瀏覽的檔案資料儲存在該目錄下,iTunes備份和恢復的時候會包括此目錄。

temp:應用執行時所需的臨時資料,使用完畢後再將相應的檔案從該目錄刪除。應用沒有執行時,系統也有可能清除該目錄下的檔案,iTunes不會同步該目錄。iPhone重啟時,該檔案下的目錄會丟失。

Library:儲存程式中的預設設定和其他狀態資訊,iTunes會自動備份該目錄。

Library/Caches:存放快取檔案,iTunes不會備份此目錄,此目錄下的檔案不會在應用退出刪除。一般存放體積比較大,不是特別重要的資源。

Library/Preferences: 儲存應用的所有偏好設定,IOS的Setting(設定)應用會在該目錄中查詢應用的設定資訊,iTunes會自動備份該目錄。Preferences是一個關係資料庫,功能非常強大。
即Preferences  配置資訊\SQLite

5、沙盒路徑獲取的方法:
(1)沙盒路徑
(2)Documents 路徑
(3)tmp 路徑
(4)Library  路徑

6、獲取目錄路徑的方法
(1)獲取沙盒根目錄
在mac下獲取的是使用者的根目錄
在IOS程式下是沙盒總目錄即根目錄所在的路徑
NSString  *sandBoxPath = NSHomeDirectory();
NSLog(“sandBoxPath = %@”,sandBoxPath);
(2)獲取絕對路徑的方法
NSSearchPathForDirectoriesInDomains返回一個絕對路徑用來存放我們需要儲存的檔案
NSSearchPathForDirectoriesInDomains(要查詢的目錄,查詢範圍是否在使用者主目錄,YES/NO 是否獲取全路徑);
第一個引數:要獲取的沙盒資料夾名稱
NSDocumentDirectory 表示獲取沙盒的Documents目錄
第二個引數:(表明在那個範圍內尋找此資料夾)
NSUserDomainMask = 1 //使用者主目錄中
NSLoaclDomainMask = 2 // 當前機器中
NSNetworkDomainMask =4 // 網路中可見的主機
NSSystemDomainMask = 8  //系統目錄不可修改 (/system)
NsAllDomainMask = 0xffff   //全部
第三個引數:YES/NO 是否獲取全路徑


此函式返回一個數組即返回一個NSArray型別的值
(因為在查詢的範圍內可能出現多個要查詢同名資料夾),一般只有一個放在index為0的一項

7、具體獲取如下:
(1)獲取Document目錄:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)
NSString *path = [paths  objectAtIndex:0];
(2)獲取Cache目錄:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *path = [paths objectAtIndex:0];
(3)獲取Library目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *path = [paths objectAtIndex:0];
(4)獲取tmp目錄:
NSString *tmpDir = NSTemporaryDIrectory();
8、最常見的用法:
NSArray *arrs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
// 在document目錄下構建新的路徑
NSString *path = [[arrs lastObject] stringByAppendingPathComponent:@“test/a.txt”];

NSLog(@“path:”,path);

新建工程  程式碼驗證一一如下:
編輯控制器的.m檔案如下:

//
//  ViewController.m
//  沙盒解析
//
//  Created by apple on 15/9/18.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 獲取沙盒的根目錄
//    NSString *sandBox = NSHomeDirectory();
//    NSLog(@"SandBoxPath = %@",sandBox);
    
    //  獲取Document路徑
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    NSString *path = [paths objectAtIndex:0];
//    NSLog(@"%@",paths);
//    NSLog(@"DocumentPath = %@ ",path);
    
    //獲取快取資料夾Cache目錄
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//    NSString *path = [paths objectAtIndex:0];
//    NSLog(@"%@",paths);
//    NSLog(@"Caches = %@",path);
    
    //獲取庫Library的目錄
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
//    NSString *path = [paths  objectAtIndex:0];
//    NSLog(@"%@",paths);
//    NSLog(@"LibraryDirectory = %@",path);
    
    // 獲取tmp目錄如下:
//    NSString *tmpDir = NSTemporaryDirectory();
//    NSLog(@"temporaryDirectory = %@ ", tmpDir);
    
    // ========================================================
    // 在Document目錄下建立資料夾
    NSArray *arrs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   // 在Document目錄下構建新的路徑
  //    NSString *path = [[arrs lastObject] stringByAppendingPathComponent:@"test/a.txt"];
    NSString *path = [[arrs lastObject] stringByAppendingPathComponent:@"test/b.plist"];
    NSString *directory; //路徑或檔案所在路徑
     // 利用NSFileManager建立路徑
    NSFileManager *manager = [NSFileManager defaultManager];
    
    BOOL isDir;
    [manager fileExistsAtPath:path  isDirectory:&isDir];
    if (isDir) {  // 如果不是一個目錄
        NSLog(@"不是一個目錄而是一個檔案");
         directory = [path stringByDeletingLastPathComponent]; // 刪除檔案最後一部分獲取檔案所在路徑
    }else
    {
        directory = path;
    }
    
    BOOL createYES;
    if (![manager fileExistsAtPath:path]) {  // 判斷如果檔案所在路徑不存在
        NSLog(@"目錄或檔案所在路徑不存在");
      createYES = [manager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:nil];
        if (createYES) {
            NSLog(@"檔案目錄建立成功");
        }
        else
        {
            NSLog(@"檔案目錄建立失敗");
            return ;
        }
    }
    NSLog(@"%@",directory);
    
    // 路徑建立成功,開始建立檔案  方式有很多種  在此用NSFileManager物件建立
   // NSString *
[email protected]
"床前明月光,疑是地上霜。\n舉頭望明月,低頭思故鄉。"; // NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding]; // BOOL isSucCreateFile = [manager createFileAtPath:path contents:data attributes:nil]; BOOL isSucCreateFile = [manager createFileAtPath:path contents:nil attributes:nil]; if (isSucCreateFile) { NSLog(@"檔案建立成功"); } else { NSLog(@"檔案建立失敗"); } NSDictionary *dict = @{@"name":@"LiuXun",@"QQ":@"2652790899"}; if ( [dict writeToFile:path atomically:YES]) { NSLog(@"檔案寫入成功"); } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end
執行結果一一如下:

1


1.1


2


2.1


3


3.1


4


4.1


5


5.1


6


6.1


7




相關推薦

iPhone開發路徑獲取

1、沙盒機制以及獲取沙盒路徑 2、沙盒的基本概念和作用 每個IOS程式都有自己的應用沙盒,應用沙盒就是檔案系統目錄,與其它應用的檔案系統相隔離。IOS系統不允許訪問其他應用的應用沙盒。在IOS8中已經開放訪問。 3、即IOS8中允許沙盒目錄中的一部分東西讓其它軟體訪問。 4

iOS 獲取模擬器上的路徑

在工程裡寫上如下程式碼,打印出來 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

iOS開發 清空路徑下的快取資料

引言: 移動應用在處理網路資源時,一般都會做離線快取處理,其中以圖片快取最為典型,其中很流行的離線快取框架為 SDWebImage 。 但是,離線快取會佔用手機儲存空間,所以快取清理功能基本成為資訊、購物、閱讀類 App 的標配功能。 由於快取檔案是存在 App 的沙

iOS開發總結儲存

1、獲取程式的Home目錄       NSString  *path = NSHomeDirectory();       NSLog(@"path:%@",path);       列印結果: path:/Users/username/Library/Application Support/iPhone

程序中的文件以及plist文件的初步使用

ice b2c ng- 可見 ngs 函數 用戶 nsdata nss 沙盒是相對於“應用程序”的文件,也就是相相應app所在的頁面的文件。 每個應用都有自己的應用沙盒(應用沙盒就是文件系統文件夾)。與其它文件系統隔離。應用必須呆在在積極的沙盒中。其它的應用不可以訪問沙

微信公眾號開發網頁授權(獲取用戶信息)

還需要 開發文檔 app err 通過 casb ddt 省份 sse   這次暑假留在學校參與工作室的項目,對微信公眾號比較感興趣,所以參與這方面的學習研究。 昨天完成了關於網頁授權,獲取用戶信息方面的功能,所以乘熱打鐵,寫上一篇。實現本篇涉及的 功能,還需要完成一些基礎

微信小程序開發從相冊獲取圖片 使用相機拍照 本地圖片上傳

服務器 color form 圖片上傳 info success height set som 1.index.wxml 1 <!--index.wxml--> 2 <button style="margin:30rpx;" bindtap="cho

iPhone如何拿到ipa?iPhone如何檢視 iOS12

工作需要,將一條Log寫在檔案中,然後拿到此Log,這就需要檢視沙盒,通過拿到ipa來檢視log檔案,其寫入在沙盒Document目錄下的日誌檔案。 為了得到ipa,嘗試了5種方法。 1):iTools方法,無法備份ipa。 2):iMazing,近一年才流行

Unity IOS讀取路徑圖片

//儲存圖片 -(void)saveImageDocuments:(UIImage *)image{     //拿到圖片     UIImage *imagesave = image;     NSString *path_sandox = NSHomeDirector

【unity3d】通過路徑的建立檔案,讀取檔案

注意的是string _path = Application.persistentDataPath + “/xxx”; xxx如果要寫xml檔案,則可不帶字尾,如果讀寫txt檔案,則需要加入xxx.txt字尾名。 注意讀寫順序,大致為 :獲取路徑,建立路徑夾,建立檔案,讀取檔案 Application.pe

【轉載】iPhone開發NSNotificationCenter(通知)的使用方法

iPhone軟體開發的時候會遇到這種情況:開啟APP後會在後臺執行某個方法,例如下載檔案,下載完成後可能需要呼叫某個方法來重新整理介面,這時候可能沒法在下載的函式中回撥。NSNotificationCenter(通知)是一個很好的選擇。 通知使用起來灰常的簡單: 1、定義通知:[[NSNotifica

iPhone開發NSNotificationCenter(通知)的使用方法

iPhone軟體開發的時候會遇到這種情況:開啟APP後會在後臺執行某個方法,例如下載檔案,下載完成後可能需要呼叫某個方法來重新整理介面,這時候可能沒法在下載的函式中回撥。NSNotificationCenter(通知)是一個很好的選擇。 通知使用起來灰常的簡單: 1

微信公眾號開發訂閱號如何獲取使用者資訊(一)

最近在做微信的公眾號的開發。之前是在一個認證過的微信服務號上開發一些相應的功能。 比如說 對認證過的微信服務好進行 自定義選單的開發,模板訊息的回覆以及關鍵詞回覆的功能。 但是目前新接了這樣一個需求:

Android開發監聽或獲取手機簡訊內容

最近開始學習安卓,要做一個可以監聽手機簡訊的內容,做個筆記,方便以後檢視 有兩種方式: 方式一:通過廣播監聽簡訊資訊 註冊一個廣播接收器 <receiver android:name="接收器包名"> <intent-filte

iOS開發plist檔案的獲取

有上圖plist檔案,可以把以上字典轉換為一個model類Cinema,接下來就是獲取這個plist檔案 -(void)getData {  NSString* filePath = [[

iphone開發輕鬆搞定原生socket 程式設計,阻塞與非阻塞,收發自如

iphone socket 開發 在iphone的平臺下,要進行socket開發其實有很多種的方法,開源的庫Asyncsocket,官方的CFSocket,還有BSD的socket。 這裡要做一個簡單的socket普及,這裡包含在socket的設定非阻塞喝超時的控制邏輯,

iphone開發表格元件UITableView的使用(三)通過載入plist檔案字典轉模型方式展示分組資料

1、通過載入plist檔案,利用在懶載入中把字典轉模型實現的步驟如下: (1)新建plist檔案,編輯plist檔案內容新增屬性。編輯步驟如下: 在檔案中新建一個NSArray用來包含所有的資料,點選大的NSArray資料的三角符號向下,新建元素字典作為NSArray的每一項內容,為第一個陣列元素即字典新增屬

微信公眾號開發網頁授權(獲取使用者資訊兩種方式)

  這次暑假留在學校參與工作室的專案,對微信公眾號比較感興趣,所以參與這方面的學習研究。昨天完成了關於網頁授權,獲取使用者資訊方面的功能,所以乘熱打鐵,寫上一篇。實現本篇涉及的功能,還需要完成一些基礎。在寫完這篇部落格後,我會盡快補上。-------------------------廢話不多說直入正題需要的

ios開發 -- 呼叫系統定位獲取當前經緯度與地理資訊

在info.plist中加入: //允許在前臺使用時獲取GPS的描述 定位許可權:Privacy - Location When In Use Usage Description  //允許永久使用GPS描述 定位許可權: Privacy - Location A

ios模擬器的路徑-開啟路徑

1、模擬器沙盒目錄 檔案都在個人使用者名資料夾下的一個隱藏資料夾裡,中文叫資源庫,他的目錄其實是Library。 1.1 方法1、可以設定顯示隱藏檔案,然後在Finder下直接開啟。設定檢視隱藏檔案的方法如下:開啟終端,輸入命名 顯示Mac隱藏檔案的命令:defaults write com.app