質問

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

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

そこで、MAX_PATH と Boost.FS に関する有用な情報を探しています。

ありがとう

更新:Path Append、Path Combineなどのすべての操作を気にします(Win32apiにはそれらの関数がありますが、max_pathより長くパスで動作しません)。Boost.FS は、長いパスをサポートしないことが多い shlwapi や Shell32 にあるような Win32API ユーティリティ関数の代替となる可能性があります。

役に立ちましたか?

解決

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

私の知る限りでは、ブースト::ファイルシステムはWindows上で、この間違ったではありません。

修正が予定されている場合は、

私は知りません。参照してください。それがどうあるべきかについて、このに行われます。

他のヒント

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

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

たとえば、Boost.Filesystem の削除機能は、パスの長さが MAX_PATH を超えると失敗します。MAX_PATH 制限を防ぐために、Boost.Filesystem に現在のディレクトリを変更して相対パスを使用するなどの処理を実行させたいですか?そんな可能性はないと思います。

編集済み

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top