**
ios程式有固定的檔案訪問限制,只能在自己的沙盒內。
uiimage *img=[uiimage imagenamed:@"cellicon.png"];
這段**從相對路徑載入了乙個png資源作為uiimage物件,沒有任何問題。因為它在內部已經偷偷得幫你把路徑轉化為相對路徑了,你還不知道吧!
接下來,如果要載入一些自定義格式的檔案或者資料,就會出現相對路徑和絕對路徑的問題。比如
nsfilehandle
*filehandle=[
nsfilehandle
filehandleforreadingatpath:newpath];
newpath為乙個字串路徑,這裡的路徑你卻不能像上面那樣
nsfilehandle
*filehandle=[
nsfilehandle
filehandleforreadingatpath:@"test.txt"];
這樣系統是找不到檔案的,因為這裡需要的是檔案的絕對路徑,而@「test.txt」完全是無效的。
這個時候就需要nsbundle的幫忙了,這個類專門用來負責路徑轉化等等功能那。大家都知道ios專案雖然在xcode下可以建立資料夾結構,但是實際上它是沒有檔案結構概念的,所以此時假如要載入放在專案目錄下的test.txt檔案,完整的**應該是這樣
方法1:
nsstring
*newpath=[
nsstring
stringwithformat:
@"%@%@%@"
,[[nsbundle
mainbundle]resourcepath],
@"/"
,path];
nslog(@"url=%@",newpath);
nsfilehandle *filehandle=[nsfilehandle
filehandleforreadingatpath:newpath];
此處[nsbundle
nsbundle
nsstring
stringwithformat:
@"%@%@%@"
,[[nsbundle
mainbundle]resourcepath],
@"/"
,path];這麼簡單的字串拼接,我就不多說了,
控制台輸出拼接後完整檔案絕對路徑:
方法2:
nsstring *newpath=[[nsbundle mainbundle] pathforresource:@"test" oftype:@"txt"];
nsfilehandle *filehandle=[nsfilehandle
filehandleforreadingatpath:newpath];
[[nsbundle mainbundle] pathforresource:@"test" oftype:@"jat"];前面的就不再介紹了,pathforresource方法有兩個引數,前面這個為檔名,後面那個oftype就是檔案型別,也就是檔案字尾。這裡把檔名和字尾分開了,如果這是你得到的是乙個完整的檔名如:@「test.txt」,那麼你得自己想辦法把檔名和字尾分開了。
要特別說明,此處的檔案字尾是不需要「.」的,如果寫成@「.jat」是錯誤的,載入檔案會失敗。
相對路徑與絕對路徑
相對路徑 以引用檔案之網頁所在位置為參考基礎,而建立出的目錄路徑。因此,當儲存於不同目錄的網頁引用同乙個檔案時,所使用的路徑將不相同,故稱之為相對。絕對路徑 以web站點根目錄為參考基礎的目錄路徑。之所以稱為絕對,意指當所有網頁引用同乙個檔案時,所使用的路徑都是一樣的。其實絕對路徑與相對路徑的不同處...
相對路徑與絕對路徑
相對路徑與絕對路徑 絕對路徑 舉例.c盤中windows目錄中system32中的ias資料夾,即c windows system32 ias 相對路徑 舉例。c盤中windows目錄中system32中的ias資料夾和c盤中windows目錄中system32中的0409資料夾,ias相對於040...
絕對路徑與相對路徑
無論是在windows還是linux作業系統下,絕對路徑和相對路徑都是很重要的概念,也是許多初學者迷惑的地方,下面我們就這兩個概念進行介紹。絕對路徑 由根目錄 開始寫起的檔名或者目錄名稱,例如 home student 相對路徑 相對於目前路徑的檔名寫法。例如.home student或者.home...