http://msdn.microsoft.com/en-us/library/07wt70x2.aspxの例に基づいて、次のコードを取得しました。
void ProcessDirectory( String^ targetDirectory )
{
if (Directory::Exists( targetDirectory )) {
printf("Directory : %s\n", targetDirectory);
// Recurse into subdirectories of this directory.
array<String^>^subdirectoryEntries = Directory::GetDirectories( targetDirectory );
IEnumerator^ dirs = subdirectoryEntries->GetEnumerator();
while ( dirs->MoveNext() )
{
String^ subdirectory = safe_cast<String^>(dirs->Current);
ProcessDirectory( subdirectory );
}
}
}
int main(int argc, char **argv)
{
ProcessDirectory( "C:\\" );
}
これは、ハード ドライブのディレクトリを単純に再帰的に反復する必要がある (と私は考えている) のですが、パスが長すぎると言ってクラッシュし続けます。
それらが長すぎるように見える理由は、Application Data に到達すると、Application Data ディレクトリ名が繰り返されるためです。エラーは以下の通りです。
ディレクトリ : C:\Documents and Settings\All Users\Application Data\Application Data a\アプリケーション データ\アプリケーション データ\アプリケーション データ\アプリケーション データ\アプリケーション n Data\Application Data\Application Data\Application Data\Adobe\CameraRaw\Camera プロファイル\カメラ\Canon EOS 1000D 未処理の例外: System.IO.PathTooLongException: 指定されたパス、ファイル na 私、または両方が長すぎます。完全修飾ファイル名は 260 ch 未満にする必要があります ディレクトリ名は 248 文字未満にする必要があります。 System.IO.Path.NormalizePath (文字列パス、ブール値の fullCheck、Int32 maxPath で 長さ) System.IO.Path.GetDirectoryName (文字列パス) で System.IO.FileSystemEnumerableIterator`1..ctor(文字列のパス、文字列の元) で lUserPath、文字列 searchPattern、SearchOption searchOption、SearchResultHandler` 1つの結果ハンドラー)