堅牢な再帰フォルダ削除機能を作成しようとしています。
通常のディレクトリではかなりうまく機能します。
次のような「ハードコア」ディレクトリを作成すると、問題が発生します。
C:\ test \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ ... \ x \ x \ x
この長さは約25000です(MSDNの制限である32,767未満)。基本的に、CreatDirectory関数が失敗するまで、このディレクトリを再帰的に作成しました。
さて、最も奇妙なことは、私の関数が2つのディレクトリを削除できることです。その後、FindFirstFileは0x5で失敗します。
\\?\C:\test\x\ ... \x\x\x\*.* < no error
\\?\C:\test\x\ ... \x\x\*.* < no error
\\?\C:\test\x\ ... \x\*.* < access denied
(私はそれを再実行することができます、おそらくパスの長さがかなり短くなるまで、アプリはゆっくりとフォルダーを2 x 2で噛み砕きます)
FindFirstFileを実行して、フォルダーが空かどうかを確認しています。
- 文書化されていない種類の制限はありますか?
- FindFirstFileは単に機能しませんか?(バギー?)
- ある種のNTFSアクセス許可がありませんか?
- 他の何か..。
編集:重要な注意:プログラムを段階的にゆっくり実行すると...何も失敗しません。