ユーザーがフォルダをOSXアプリにドロップできるようにしたいと思います。次に、ディレクトリとそのサブディレクトリ内のすべてのファイルを確認します。これは正常に機能しますが、ディレクトリにエイリアスがある場合は機能しません。エイリアスは正しく解決されますが(Matt Gallagherのおかげで、Appleに恥をかかせます)、列挙子はターゲットディレクトリを列挙することを許可しません(要素を返さず、以下のエラーを返すだけです)。サンプルコードは次のとおりです。
-(void)enumDirAtPath:(NSString*)path {
NSString* file_enum = nil;
NSDirectoryEnumerator* enumerator = [[NSFileManager defaultManager] enumeratorAtPath:path];
while (file_enum = [enumerator nextObject])
{
NSString* file = [[NSString stringWithFormat:@"%@/%@",path,file_enum] stringByResolvingSymlinksAndAliases];
BOOL isDirectory = NO;
[[NSFileManager defaultManager] fileExistsAtPath:file isDirectory: &isDirectory];
if (!isDirectory) {
NSLog(@"Adding file: %@",file);
} else {
NSLog(@"Found dir: %@",file);
[self enumDirAtPath: file];
}
}
}
同じコードでenumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
このエラーが発生します:
エラー:エラードメイン= NSCocoaErrorDomainコード=257「ファイル「Musik」を表示する権限がないため、ファイルを開くことができませんでした。」UserInfo = 0x1094cf670 {NSURL = file:// localhost / Users / david / Desktop / Musik、NSFilePath = / Users / david / Desktop / Musik、NSUnderlyingError =0x1094d43f0"操作を完了できませんでした。操作は許可されていません"}
再帰呼び出しをdispatch_asyncしただけでも、それを実行できません。ディレクトリを繰り返し処理してすべてのコンテンツを取得する方法はありますか?
注:これにより無限ループが発生する可能性があることを十分に認識しています。このコードは、問題を説明するためのものです。