アプリケーションバンドル内のファイルを見つけるには、を使用する必要があります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];