下面表格中的措施 可以用來操作 路徑:
措施名稱 | 描述 |
+(NSString *)pathWithComponents:components | 用components創建有效的路徑名稱 |
-(NSArray *)pathComponents | 將路徑名稱拆分成若干組成部分 |
-(NSString *)lastPathComponent | 獲取路徑名稱中最后一個組成部分 |
-(NSString *)pathExtension | 獲取路徑名稱中的擴展名(后綴名) |
-(NSString *)stringByAppendingPathComponent:path | 將path添加到已有的路徑名稱末尾 |
-(NSString *)stringByAppendingPathExtension:ext | 將擴展名ext添加到已有的路徑名稱的最后一個組成部分的末尾 |
-(NSString *)stringByDeletingLastPathComponent | 將已有的路徑名稱的最后一個組成部分刪除 |
-(NSString *)stringByDeletingPathExtension | 刪除已有路徑名稱的擴展名 |
-(NSString *)stringByExpandingTildeInPath | 將路徑名稱中的~字符展開 |
-(NSString *)stringByResolvingSymlinksInPath | 解析路徑名稱中的符號鏈接 |
-(NSString *)stringByStandardizingPath | 將路徑名稱標准化 |
下面表格中的函數 可以用來獲取 用戶名、用戶的主目錄路徑 還有 臨時目錄路徑:
函數名稱 | 描述 |
NSString *NSUserName(void) | 獲取當前用戶的登錄名 |
NSString *NSFullUserName(void) | 獲取當前用戶的全名 |
NSString *NSHomeDirectory(void) | 獲取當前用戶的主目錄路徑 |
NSString *NSHomeDirectoryForUser(NSString *user) | 獲取用戶user的主目錄路徑 |
NSString *NSTemporaryDirectory(void) | 獲取臨時目錄的路徑 |
NSPathUtilities.h這個頭文件 包含了 一些函數 和 類別。這些函數 和 類別 是 對NSString這類物件的擴展。你 可以用 這些函數 和 類別 來控制 路徑名稱。任何時候 只要可能 你 都應該使用 這些函數 和 類別,因為 這樣做 可以使 你的程序 更少地 依賴 特定的文件系統結構 和 某些特定文件、目錄的位置。下面的程序 示范了 如何使用 NSPathUtilities.h這個文件所提供的函數 和 措施:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#import <Foundation/NSArray.h>
#import <Foundation/NSString.h>
#import <Foundation/NSFileManager.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSPathUtilities.h>
int
main
(
int
argc
,
const
char
*argv
[
]
)
{
NSAutoreleasePool
*pool
=
[
[
NSAutoreleasePool
alloc
]
init
]
;
NSString
*fileName
=
@"main.m"
;
NSFileManager
*myFileManager
;
NSString
*path
,
*temporaryDirectory
,
*extension
,
*homeDirectory
,
*fullPath
;
NSString
*uPath
=
@"~/Desktop/Sample/Sample/main.m"
;
NSArray
*components
;
myFileManager
=
[
NSFileManager
defaultManager
]
;
//獲取並且顯示臨時目錄
temporaryDirectory
=
NSTemporaryDirectory
(
)
;
NSLog
(
@"臨時目錄為:%@"
,
temporaryDirectory
)
;
//從當前目錄路徑中獲取基本目錄
path
=
[
myFileManager
currentDirectoryPath
]
;
NSLog
(
@"基本目錄為:%@"
,
[
path
lastPathComponent
]
)
;
//獲取文件main.m的完整路徑
fullPath
=
[
path
stringByAppendingPathComponent
:
fileName
]
;
NSLog
(
@"完整路徑為:%@"
,
fullPath
)
;
//獲取完整路徑fullPath中的擴展名
extension
=
[
fullPath
pathExtension
]
;
NSLog
(
@"擴展名為:%@"
,
extension
)
;
//獲取用戶的主目錄
homeDirectory
=
NSHomeDirectory
(
)
;
NSLog
(
@"用戶主目錄為:%@"
,
homeDirectory
)
;
//將用戶的主目錄路徑拆分,並且分別顯示出來
components
=
[
homeDirectory
pathComponents
]
;
for
(
NSString
*pathComponent
in
components
)
{
NSLog
(
@"%@"
,
pathComponent
)
;
}
//將簡略路徑轉換成標准路徑
NSLog
(
@"%@=>%@"
,
uPath
,
[
uPath
stringByStandardizingPath
]
)
;
[
pool
drain
]
;
return
0
;
}
|
2012-05-1513:18:05.917Sample[3418:707]臨時目錄為:/var/folders/l9/6375t2dn7wxftl7_rvxnh08r0000gn/T/
在這個程序當中 NSTemporaryDirectory()這個函數所產生的結果 是 臨時目錄的路徑。在臨時目錄當中 你 可以創建 臨時文件。如果 你 在臨時目錄當中 創建 文件,那么 你 必須保證 最后 將 臨時文件 清理出去。同時 你 必須確保 你創建的文件之名稱 是 獨一無二的。
lastPathComponent這項措施 會將 其實施對象所代表的路徑中 最后一個組成部分 讀取出來。如果 其實施對象 為 路徑“/Users/Zijin/Library/Developer/Xcode/DerivedData/Sample-bwtvtehgdvdkzgaqfkwvluuhrhso/Build/Products/Debug”,那么 最后產生的結果 就是 這個路徑的最后一個組成部分,也就是 Debug。
stringByAppendingPathComponent:這項措施的實施對象 為 路徑名稱,而 其參數 則是 文件名稱。這項措施的作用 是 將 文件名稱 添加 到路徑名稱的結尾處。如果 這項措施的實施對象所代表的路徑名稱 不是 用斜杠結尾的,那么 這項措施 會 自動 在其實施對象所代表的路徑名稱之結尾處 加上 一個斜杠。利用 currentDirectory 和 stringByAppendingPathComponent:這兩項措施 就可以得到 當前目錄中任意一個文件的完整路徑。
pathExtension這項措施 用來讀取 其實施對象所代表的文件之擴展名。在這個程序中 pathExtension這項措施的實施對象 是 fullPath,fullPath代表的是 “/Users/Zijin/Library/Developer/Xcode/DerivedData/Sample-bwtvtehgdvdkzgaqfkwvluuhrhso/Build/Products/Debug/main.m”,那么 這項措施所產生的結果 就是 m。如果 這項措施的實施對象 沒有 擴展名,那么 這項措施所產生的結果 就是 空字符串。
NSHomeDirectory()這個函數所產生的結果 為 當前用戶的主目錄。你 可以用 這個函數 來獲取 任何一個特定用戶的主目錄,只要 在參數中 填上 那個用戶的名稱 就可以了。
pathComponents這項措施所產生的結果 為 NSArray類型的數組物件。這個數組物件 包含着 其實施對象所代表的路徑之構成部分。在這個程序當中 pathComponents這項措施的實施對象 為 homeDirectory,也就是 當前用戶的主目錄路徑。接着 用 快速枚舉 將 當前用戶主目錄路徑的構成部分 從components這個數組物件當中 依次 讀取 並且 顯示出來。
最后 uPath這個物件所代表的路徑名稱中 包含了 ~字符。在之前 我們 說過 適用於NSFileManager這類物件的措施 會接受 ~這個字符 來代替 當前用戶的主目錄 或者 用 ~用戶名 來代表 某個特定用戶的主目錄。如果 某個路徑名稱 包含 ~這個字符,那么 可以對 這個路徑名稱 采取 stringByStandardizingPath這項措施,將 其 轉換成 完整的路徑名稱。