1

Objective-C でディレクトリ内のすべての .jpg ファイルを選択する簡単な方法を探しています。現在、すべてのディレクトリの内容しか取得できません。*.jpg などのワイルドカードを結果に適用する方法はありますか?

 if ( [[NSFileManager defaultManager] isReadableFileAtPath:@"/folder2/"] )
             [[NSFileManager defaultManager] copyItemAtPath:@"/folder2/" toPath:@"/folder1/" error:nil];
4

2 に答える 2

3

次のようなものを使用できます。

NSArray *list = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/folder2/" error:nil];
for (NSString* file in list) {
    if ([[file pathExtension] isEqualToString: @"jpg"]) {
         [[NSFileManager defaultManager] copyItemAtPath:file toPath:@"/folder1/" error:nil];
    }
}

このcontentsOfDirectoryAtPath:errorメソッドは、指定されたディレクトリ内のファイルの名前を含む配列を返します。エントリごとに、NSString pathExtensionメソッドの結果がターゲット文字列 ("jpg") と比較されます。一致するすべてのファイルが宛先ディレクトリにコピーされます。

于 2012-12-20T03:04:59.480 に答える
1

ドキュメントからかなりまっすぐ:

NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir];
NSString *file;
while (file = [dirEnum nextObject]) {
    if ([[file pathExtension] isEqualToString: @"jpg"]) {
        // process the document
        [self doSomethingWithFile: [docsDir stringByAppendingPathComponent:file]];
    }
}

NSDirectoryEnumerator も高速列挙をサポートしているように見えるので、代わりにそれを使用できます。

NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir];
for (NSString *file in dirEnum) {
    if ([[file pathExtension] isEqualToString: @"doc"]) {
        // process the document
        [self doSomethingWithFile: [docsDir stringByAppendingPathComponent:file]];
    }
}

ディレクトリ列挙子を使用することと、によって返されるリストを反復処理することの違いは-contentsOfDirectoryAtPath:、ディレクトリ列挙子がサブディレクトリからの結果も提供することです。

于 2012-12-20T03:07:57.273 に答える