2011-01-25 12 views
5

サーバー上にファイル数がMAX_PATH個を超えるファイルがあります。 パスにあらかじめ保留中の\\?\でこれらのファイルをリストすることができると繰り返し聞いてきました。ただし、ファイル名の長さをMAX_PATHに制限するデータ構造を使用しているため、FindFirstFile[Ex]とそのパートナーの問題は解決しません。任意の形式のWindows APIを使用して長いパス名を繰り返し処理する方法

名前が長すぎるファイルを見つけるためにディレクトリ構造を反復処理する方法はありますか?私はそれを行うユーティリティを見てきましたが、ソース形式で利用できるものはありません。

私は、.NET BCLの人々からのブログエントリを見て、彼らが提供するリンクに従っていることに注意してください。

シンプルさのためにこれをCまたはC++で行うことをお勧めしますが、自由に利用できる言語は今のところは行います。

コード、ドキュメント、または有用なものへのポインタが評価されます。

答えて

9

ここに問題はないと思います。あなたはWIN32_FIND_DATAを参照しています。実際には、長さが制限されたファイル名はMAX_PATHに戻ります。しかし、これはファイル名部分だけであり、パスは省略されているので、制限はありません。

ディレクトリ内のオブジェクト(ファイルまたはフォルダ)の長さは、通常255文字に制限されています。 lpMaximumComponentLengthパラメータがGetVolumeInformationの場合、この制限値は何かを判断できます。

FindFirstFileへの呼び出しでは、ヌルターミネーション文字列lpFileNameがディレクトリとファイル名(例: "* .txt")を受け取るため、 "、)検索する。ドキュメントは述べている:この関数のANSI版で

を、 名はMAX_PATH 文字に制限されています。この制限を ワイド文字の32,767文字に拡張するには、関数のUnicodeバージョンを と呼び、 の先頭に「\\?\」を追加します。

+0

Davidさん、ありがとうございました。これは私が求める前にAPIを使用しようとしないために得られるものです。 :)本当に早すぎる最適化? – JimR

関連する問題