下面表格中的措施 可以用来操作 路径:
措施名称 | 描述 |
+(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这项措施,将 其 转换成 完整的路径名称。