iOS设备中的每个文件都有路径,这指的是文件在文件系统中的准确位置。要让应用程序能够读写其沙箱中的文件,需要指定该文件的完整路径。Core Foundation提供了一个名为NSSearchPathForDirectoriesInDomains
的C语言函数,它返回指向应用程序的目录Documents或Library/Caches的路径。该函数可返回多个目录,因此该函数调用的结果为一个NSArray对象。使用该函数来获取指向目录Documents或Library/Caches的路径时,它返回的数组将只包含一个NSString;要从数组中提取该NSString,可以使用NSArray的objectAtIndex
方法,并将索引指定为0。
NSString提供了一个名为stringByAppendingPathComponent
的方法,可用于将两个路径段合并起来。通过调用NSSearchPathForDirectoriesInDomains
的结果与特定文件名合并起来,获取一条完整的路径,它指向应用程序的Documents或Library/Caches目录中相应的文件。
例如开发一个计算圆周率的前100000位的iOS应用程序,而我们希望应用程序将结果写入到一个缓存文件中以免重新计算。为了获取指向该文件的完整路径,首先需要获取指向目录Library/Caches的路径,再在它后面加上文件名:
NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *piFile = [cacheDir stringByAppendingPathComponent:@"American.pi"];
要获取指向目录Documents中特定文件的路径,可以使用相同的方法,但是需要将传递给NSSearchPathForDirectoriesInDomains
的第一个参数设置为NSDocumentDirectory
:
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *scoreFile = [docDir stringByAppendingPathComponent:@"HighScores.txt"];
Core Foundation还提供了另一个名为NSTemporaryDirectory
的C语言函数,它返回应用程序的tmp目录的路径。与前面一样,也可使用该函数来获取指向特定文件的路径:
NSString *scratchFile = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Scratch.data"];