1

Dropboxにいくつかのサブディレクトリとファイルを含むリモートディレクトリがあります。

リモート側:

-Mobile Profiles *(root)*
-- Custom Profiles
--- Profile1
--- Profile2
--- Profile3

ファイルとディレクトリ/およびファイルを含むサブディレクトリをアップロードすることは問題ではありません。ドロップボックスからデバイスにサブディレクトリとそのコンテンツを取得することになると、私は頭がおならをしています。

置く

-(void)backupCustomProfiles {
    for ( NSString *file in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:MP_CUSTOM error:&error] ) {
        [self.restClient uploadFile:file toPath:@"/Mobile Profiles/Custom Profiles/" fromPath:EasyStrings(MP_CUSTOM,file)];
    }
}

得る

-(void)restoreCustomProfiles {
    for ( ) {
        /* ? */
    }
}

リモート側のサブディレクトリを反復処理する方法がわかりません。

4

1 に答える 1

5

最初にディレクトリメタデータをロードし、次にそれが参照するファイルをロードします。

並列フェッチの数を制限するには、すべてのloadMetadataおよびloadFile呼び出しにNSOperationQueueを使用して、並列フェッチの数を制限します。また、冗長なファイルのダウンロードを避けるために、ダウンロードしたメタデータをplistに覚えておいてください。

- (void) restoreCustomProfiles
{
    [self.client loadMetadata:@"/Mobile Profiles/Custom Profiles" withHash:hash];
}

- (void) restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata
{
    for (DBMetadata* child in metadata.contents) {
        NSString *path = [child.path lowercaseString];

        if (child.isDirectory) {
            [client loadMetadata:child.path withHash:hash];
        } else {
            [client loadFile:pathToDownload intoPath:[
                                self.directory stringByAppendingString:path]];
        }
    }
}

- (void) restClient:(DBRestClient*)client loadedFile:(NSString*)destPath
{
    // successfully downloaded a file to destPath
}
于 2011-03-22T05:12:31.063 に答える