0

Macアプリケーションでシェルスクリプトによって作成されたファイルを移動するのに問題があります。

ファイルは次の場所に保存されているようです:

/Users/USERNAME/Library/Developer/Xcode/DerivedData/APPLICATION_NAME/Build/Products/Debug/

NSFileManagerを次のように使用しようとしましたが、何も起こりません。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
[[NSFileManager defaultManager] movePath:[NSString stringWithFormat:@"%/Users/USERNAME/Library/Developer/Xcode/DerivedData/APPLICATION_NAME/Build/Products/Debug/%@", filename] toPath:documentsDirectory handler:nil];

NSTaskでシェルスクリプトを使用してファイルを移動しようとするだけでなく。

私はおそらく何か間違ったことをしているのですが、ファイルをそのフォルダーからおそらくDocumentsフォルダー、さらにはデスクトップに移動する方法を誰かが知っていますか?

みなさん、よろしくお願いします

4

1 に答える 1

1

アプリケーションバンドル内のファイルを見つけるには、を使用する必要がありますmainBundlefoo.txt見つける必要のあるファイルがあり、それが標準のリソースの場所に保存されていると仮定して、次の手順を実行します。

NSBundle *appBundle = [NSBundle mainBundle];
NSString *srcPath = [appBundle pathForResource: @"foo" ofType: @"txt"];

この時点で、foo.txtsrcPathに自分へのパスが必要です。

ユーザー用にファイルをダウンロードする場合は、ユーザーの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];
于 2012-06-08T11:45:08.880 に答える