11

Boost.Filesystemライブラリを使用して、パス、ファイル、およびディレクトリを操作したいと思います。私の質問は、MAX_PATHよりも長いパスがサポートされているかどうかです。

Win32APIには回避策「\\?」があることは知っていますが、PathAppendやPathCombineなどの基本的な関数ではサポートされていません。

だから私はMAX_PATHとBoost.FSについての有用な情報を探しています。

ありがとう

UPD:パスの追加、パスの結合などのすべての操作に注意します(Win32APIにはこれらの関数がありますが、MAX_PATHより長いパスでは機能しません)。たとえば、CreateFileWとDeleteFileWはどちらもMAX_PATHより長いパスをサポートします。Boost.FSは、shlwapiやshell32に見られるような、長いパスをサポートしないことが多いWin32APIユーティリティ関数の代わりになる可能性があります

4

2 に答える 2

4

真実は、Windowsは任意の長さのパスをサポートし、Windowsでは任意のパスを文字列に変換できるということです。このような場合は追加\\?\が必要ですが、これは「指定されたパスから文字列を作成する」操作の一部です。

AFAIK、Boost::FileSystemはWindowsでこれを間違って行います。

修正が予定されているかどうかわかりません。それがどのように行われるべきかについてはこれを見てください。

于 2011-03-09T10:58:31.917 に答える
-2

Boost.Filesystemの有無にかかわらず、任意の長さのファイルシステムパス文字列を操作できます。

MAX_PATHは、WindowsファイルAPIの制限です。つまり、長すぎるパス文字列をWindowsAPIに渡すことはできません。

たとえば、Boost.Filesystemのremove関数は、MAX_PATHの長さのパスより長くなると失敗します。Boost.Filesystemに、現在のディレクトリを変更し、相対パスを使用してMAX_PATHの制限を防ぐようなことをさせたいですか?私はそうは思わない。

編集済み

Boost.FilesystemはC++文字列に実装されているため、パスの長さを気にする必要はありません。Boost.Filesystemは、パス文字列操作メソッドだけでなく、ファイルシステム操作メソッドも提供します。結果のパスが長すぎる場合は、ファイルシステムメソッドを避ける必要があります。

Boost.FilesystemがWin32Unicodeパスをサポートしているかどうかはわかりませんが、Win32ファイルAPIを呼び出す前に、最終的なANSIパスをUnicodeパスに変換できます。

于 2011-01-05T16:44:17.463 に答える