1

ダウンロードしたファイルをアプリのドキュメント ディレクトリ内の特定のフォルダーにコピーしようとしていますが、うまくいきません。私が使用しているコードは次のとおりです。

NSString *itemPathString = @"http://pathToFolder/folder/myFile.doc";
NSURL *myUrl = [NSURL URLWithString:itemPathString];

NSArray *paths = [fm URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];

NSURL *folderPath = [[paths objectAtIndex:0] URLByAppendingPathComponent:@"folder"];
NSURL *itemURL = [documentsPath URLByAppendingPathComponent:@"myFile.doc"];

// copy to documents directory asynchronously
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    NSFileManager *theFM = [[NSFileManager alloc] init];
    NSError *error;
    [theFM copyItemAtURL:myUrl toURL:itemURL error:&error];
    }
});

ファイルを正常に取得できますが、コピーできません。上記のコードに何か問題があるかどうか、誰か教えてもらえますか?

4

3 に答える 3

3

サーバーからファイルをダウンロードする場合、ファイルがかなり小さい場合 (たとえば、mb ではなく kb で測定) dataWithContentsOfURL、. そのメソッドを使用してファイルをメモリにロードし、次にNSDataインスタンス メソッドを使用しwriteToFileてファイルを保存できます。

ただし、ファイルが大きい場合は、NSURLConnectionファイル全体をメモリに保持しようとせず、必要に応じてファイル システムに書き込む を使用することをお勧めします。ただし、ここでの秘訣は、複数のファイルをダウンロードする場合は、それらを順番にダウンロードするか、同時ダウンロードごとに個別のコピーを作成できるようにNSURLConnectionと をカプセル化する必要があることです。NSOutputStream

実装がどのように見えるかを示すプロジェクトDownload ManagerをアップロードしましたNSURLConnectionが、それは簡単ではありません。ASIHTTPRequestRestKitなどの確立されたサードパーティ ライブラリの使用を検討することをお勧めします。

于 2012-11-13T16:31:23.293 に答える
3

特定の名前のフォルダーにアクセスする場合は、存在するかどうかを確認し、存在しない場合は作成する必要があります。これは、次のように非常に簡単に実行できます。

NSString *folder = [documentsPath stringByAppendingPathComponent:folderName];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;
if (![fileManager fileExistsAtPath:folder]) {
    [fileManager createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:nil error:&error];
}
if (error != nil) {
    NSLog(@"Some error: %@", error);
    return;
}

編集

デバイスでフォルダーが適切に作成されたかどうかを確認したい場合は、オーガナイザー -> デバイス -> [YourDevelopingDeviceWhereTheAppWasInstalled] -> アプリケーション -> [YourApplication] に移動しました。

下部のセクションには、少なくとも Documents のようないくつかのフォルダーが表示されます。成功した場合は、作成したフォルダーも同様です。

ここに画像の説明を入力

于 2012-11-13T16:44:14.990 に答える
1

ファイルをコピーする前に、中間ディレクトリを作成する必要があります。Simulator フォルダをチェックインして、アプリケーションの Documents フォルダに「フォルダ」ディレクトリが作成されているかどうかを確認します。

シミュレーターへのパスは /Users/$username/Library/Application Support/iPhone Simulator/ です。

于 2012-11-13T16:00:17.020 に答える