1

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つの結果ハンドラー)
4

0 に答える 0