您永远不应该对路径进行硬编码。您应该使用各种可用的 API来构建路径。
有几种方法可以构造有效路径。例如,这有效:
NSString* filePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop"] stringByAppendingPathComponent:@"CustomerNames.plist"];
或者,您可以使用:
NSString* filePath = [@"~/Desktop/CustomerNames.plist" stringByExpandingTildeInPath];
尽管这些是构建路径、访问特殊位置(例如桌面、文档文件夹或应用程序支持文件夹)的正确方法,但您应该使用该NSSearchPathForDirectoriesInDomains()
函数,或者最好使用NSFileManager
方法URLsForDirectory:inDomains:
或URLForDirectory:inDomain:appropriateForURL:create:error:
.
这些基于 URL 的方法应始终优先于基于路径的等效方法。Apple 建议所有开发人员尽快支持基于 URL 的方法。
这主要是因为文件 URL 可以存储书签数据,因此如果文件移动,仍然可以解析 URL,而路径不是这种情况,因为路径只是字符串,不能存储元数据。
以下是使用文件管理器查找 URL 的方法:
NSFileManager* fm = [NSFileManager defaultManager];
NSURL* desktopURL = [fm URLForDirectory:NSDesktopDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
shouldCreate:NO
error:nil];
NSURL* fileURL = [desktopURL URLByAppendingPathComponent:@"CustomerNames.plist"];