14

Unicode ファイル名が指定されたファイルを開くための ac ライブラリに出会いました。ファイルを開く前に、まず "\\?\" を先頭に追加してファイル名をパスに変換します。この msdn articleに従って、パスで許可される最大文字数を増やす以外にこれを行う理由はありますか?

これらの「\\?\」パスには、Windows API と標準ライブラリの Unicode バージョンが必要なようです。

4

5 に答える 5

10

はい、そのためだけです。ただし、MAX_PATH の長さを超えるパスを作成すると、互換性の問題が発生する可能性があります。たとえば、エクスプローラー シェルとコマンド プロンプト (少なくとも XP では、Vista については知りません) は、その長さを超えるパスを処理できず、エラーを返します。

于 2008-12-04T18:32:23.253 に答える
5

この方法の最適な用途は、おそらく新しいファイルを作成することではなく、他の誰かが作成した可能性のある既存のファイルを管理することです。

で定期的にファイルを取得するファイルサーバーを管理していましたpath_length > MAX_PATH。ご覧のとおり、ユーザーはファイルを として認識してH:\myfile.txtいましたが、サーバー上では実際にはH:\users\username\myfile.txtでした。したがって、ユーザーが正確MAX_PATHな文字でファイルを作成した場合、サーバー上ではMAX_PATH+len("users\username").

(MAX_PATH 文字を含むファイルを作成することはそれほど珍しいことではありません。Internet Explorer で Web ページを保存すると、ページ タイトルがファイル名として使用されるため、ページによっては非常に長くなる可能性があるためです)。

また、(ネットワークまたは USB 経由で) ドライブを Mac または Linux マシンと共有すると、con、prn、lpt1 などの名前のファイルが表示されることがあります。繰り返しになりますが、プレフィックスを使用すると、スクリプトでこれらのファイルを処理できます。

于 2008-12-09T09:20:00.760 に答える
3

長いパスを許可するだけでなく、"\\?\" プレフィックスを使用すると、"con" や "aux" などのファイルやディレクトリ名も使用できます。通常、Windows はそれらを旧式の DOS デバイスとして解釈します。

于 2012-08-19T18:22:57.833 に答える
3

最初に注意すべきことは、「\\?\」はパスを UNC パスにしないということだと思います。2 回目に UNC形式のパスと呼んだ方が正確でした。しかしそれでも、類似性は最初に 2 つのバックスラッシュがあることによってのみ生じます。UNCとはまったく関係ありません。これは、"\\?\" プレフィックスを持つ UNC パスを取得するには、さらに多くの文字を使用する必要があるという事実によって裏付けられています。

そのプレフィックスを使用する理由はすべてわかったと思います。あなたが引用した記事で説明されているように、最大​​長の制限を解除します。また、Unicode パスにのみ適用されます。非 Unicode パスは、そのプレフィックスを使用して制限を回避することはできません。

注意すべきことの 1 つは、プレフィックスは相対パスには使用できず、絶対パスにのみ使用できることです。C ライブラリがその制限を尊重していることを再確認することをお勧めします。

于 2008-12-04T18:42:25.620 に答える
1

私は 1995 年から Windows コードを書いています。このプレフィックスは知っていますが、それを使用する理由がまったく見つかりませんでした。パスの長さをそれ以上に長くMAX_PATHすることが唯一の理由のようであり、私も私のプログラムの顧客も、私の知る限りそうしたことはありません。

于 2008-12-04T18:11:56.120 に答える