沙盒檔案管理

2021-07-05 03:32:12 字數 3993 閱讀 6379

沙盒檔案

每個ios

應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄,與其他應用的檔案系統隔離,

ios系統不允許訪問其他應用的應用沙盒。在

ios8

中已經開放訪問。

應用沙盒一般包括以下幾個檔案目錄:應用程式包、

documents

、libaray

(下面有

caches

和preferences

目錄)、

tmp。

應用程式包

:包含所有的資源檔案和可執行檔案。

documents

:儲存應用執行時生成的需要持久化的資料,

itunes

會自動備份該目錄。蘋果建議將程式中建立的或在程式中瀏覽到的檔案資料儲存在該目錄下,

itunes

備份和恢復的時候會包括此目錄

tmp:

儲存應用執行時所需的臨時資料,使用完畢後再將相應的檔案從該目錄刪除。應用沒有執行時,系統也有可能會清除該目錄下的檔案,

itunes

不會同步該目錄。

iphone

重啟時,該目錄下的檔案會丟失。

library

:儲存程式的預設設定和其他狀態資訊,

itunes

會自動備份該目錄。

libaray/caches:

存放快取檔案,

itunes

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

libaray/preferences:

儲存應用的所有偏好設定,

ios的

settings

(設定)應用會在該目錄中查詢應用的設定資訊,

itunes

會自動備份該目錄。

沙盒檔案目錄獲取**:

//home

目錄nsstring *homedirectory = nshomedirectory(); 

//document

目錄nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);   

nsstring *path = [paths objectatindex:0];   

//cache

目錄nsarray *paths = nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes);   

nsstring *path = [paths objectatindex:0];   

//libaray

目錄nsarray *paths = nssearchpathfordirectoriesindomains(nslibrarydirectory, nsuserdomainmask, yes);   

nsstring *path = [paths objectatindex:0];   

//tmp

目錄nsstring *tmpdir = nstemporarydirectory();    

資料夾操作

建立資料夾:

沙盒資料夾操作使用系統

foundation

框架下的

nsfilemanager

檔案操作類實現。在沙盒中新建資料夾,需指定新建資料夾的絕對路徑,然後手動建立。並且要保證新建資料夾的上級路徑已經存在,否則需要先建立上級資料夾路徑。資料夾的建立使用

createdirectoryatpath

方法。新建資料夾**:

if ([[nsfilemanager defaultmanager] fileexistsatpath:createpath])//

判斷createpath

路徑資料夾是否已存在,此處

createpath

為需要新建的資料夾的絕對路徑

else   p

s:如何保證新建資料夾的父親資料夾已經存在,

ios的

foundation

框架中的

nspathutilities

類中提供了一些操作路徑

string

的方法。

stringbydeletinglastpathcomponent 

:去掉路徑中的最後一級成員

比如pp/ppp/pppp  

操作過後則為:

pp/ppp 

pathcomponents 

:拆分路徑

比如pp/ppp/pppp  

執行後得到乙個

nsarray

陣列,裡面有三個元素為

pp ppp pppp

。lastpathcomponent 

:獲取路徑中的最後一級檔名

相關方法還有很多,可參考

nspathutilities

類。刪除資料夾:

刪除資料夾,需先判定該資料夾是否存在(使用

fileexistsatpath

方法),如果存在,執行刪除操作(使用

removeitematpath

)。刪除資料夾**:

if([[nsfilemanager defaultmanager] fileexistsatpath:pathfull])//

如果存在臨時檔案的配置檔案

移動資料夾:

資料夾移動需要兩個引數,資料夾原絕對路徑與目標絕對路徑。使用

moveitematpath 

方法實現

移動資料夾**:

if([filemanager moveitematpath:prepath topath:cenpath error:&error]!=yes)// prepath 

為原路徑、

cenpath 

為目標路徑

else 

ps:資料夾移動需要注意的是,要確保目標路徑中除了目標資料夾之外的路徑確實存在。否則移動到乙個還沒有建立的資料夾下,是會失敗的,這和建立資料夾是一樣的。

重新命名資料夾:

重新命名資料夾也需要兩個引數,原絕對路徑與目標絕對路徑,用了乙個偷換概念的方式來實現,其實用的是移動資料夾的方法。不贅述。

獲取目錄下的所有檔名稱(包括資料夾與檔案):

nsarray *filenamelist=[[nsfilemanager defaultmanager] contentsofdirectoryatpath:imagesfolder error:nil];// filenamelist

中即為該

imagesfolder

資料夾下的所有檔案的名稱陣列

檔案操作:

寫入檔案:

寫入檔案需要首先判定該檔案的父親資料夾是否存在,存在則可以進行寫入,否則需首先建立父親

路徑。使用

writetofile

方法。寫入檔案的同時,系統會自動建立檔案。

一般資料型別,比如陣列、字典、

nsdata

、nsstring

都可以直接呼叫

writetofile

方法寫入檔案。

**:[arraya writetofile:filepath atomically:yes];    

也可以手動建立檔案:

[filemanager createfileatpath:destinationpath contents:[string datausingencoding:nsutf8stringencoding] attributes:nil]  

讀取檔案:

如果使用者知道檔案內容的資料型別比較規整,則可以直接讀取檔案內容到標準資料結構中。

nsarray *arraya = [[nsarray alloc]initwithcontentsoffile:filepath];    

ps:或許有些時候,需要用到混合資料的寫入與讀取,可以使用

nsmutabledata

實現。參考**

25 沙盒 檔案管理者

1.獲取沙盒路徑 動態獲取document目錄 nsstring doc nssearchpathfordirectoriesindomains nsdocumentdirectory,nsuserdomainmask,yes lastobject 建立資料夾 建立檔案管理者 nsfilemanag...

沙盒檔案儲存

1.plist檔案的訪問 1.1 document的目錄搜尋 1.拼接字串 nsstring homepath nshomedirectory 獲得沙盒路徑 2.系統提供的搜尋 searchpath 搜尋路徑 fordirectories 哪個資料夾 indomains 在哪搜尋 nsstring ...

沙盒 檔案操作

documents 儲存應用執行時生成的需要持久化的資料,itunes會自動備份該目錄。蘋果建議將程式中建立的或在程式中瀏覽到的檔案資料儲存在該目錄下,itunes備份和恢復的時候會包括此目錄 tmp 儲存應用執行時所需的臨時資料,使用完畢後再將相應的檔案從該目錄刪除。應用沒有執行時,系統也有可能會...