要在应用程序包中找到该文件,您需要使用mainBundle
. 假设您有一个foo.txt
需要定位的文件,并且它存储在标准资源位置,请执行以下操作:
NSBundle *appBundle = [NSBundle mainBundle];
NSString *srcPath = [appBundle pathForResource: @"foo" ofType: @"txt"];
此时,您应该foo.txt
在 srcPath 中有路径。
如果要为用户下载文件,则应将其放入用户的 Downloads 目录。如果您下载文件供内部使用,它属于/Library/Application Support/<yourapp>/...
或~/Library/Application Support/<yourapp>...
。
找到这些的正确方法是使用NSSearchPathForDirectoriesInDomains
.
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDownloadsDirectory,
NSUserDomainMask, YES);
将产生一个数组(应该是 1 个元素),其中包含当前用户的下载目录路径。如果他们正在请求该文件,您应该将其用作目标路径。
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSApplicationSupportDirectory,
NSUserDomainMask, YES);
将产生一个数组(应该是 1 个元素),其中包含当前用户的应用程序支持路径。如果这是应用程序内部使用的每个用户下载,则应将其存储在使用附加到此路径的应用程序名称或标识符创建的子目录中。
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSApplicationSupportDirectory,
NSSystemDomainMask, YES);
将产生一个数组(应该是 1 个元素),其中包含机器的应用程序支持路径。如果这是应用程序内部使用的机器范围下载,则应将其存储在使用附加到此路径的应用程序名称或标识符创建的子目录中。
创建源路径和目标路径后,您需要使用它NSFileManager
来将文件移动到位。对于应用程序支持目录,您需要首先验证您想要的目录是否存在,如果不存在,请创建它(使用-createDirectoryAtPath:withIntermediateDirectories:attributes:error
)。
NSFileManager *manager = [[NSFileManager alloc] init];
NSError *error;
if (![manager copyItemAtPath: srcPath toPath: dstPath error: &error]) {
NSLog("Error copying %@ to %@, %@", srcPath, dstPath, error);
}
[manager release];