3

OS X 10.8 ホストの VirtualBox で Windows 7 を実行しています。>>>FILE<<<ホストには、 insideという名前のファイルを含む共有フォルダーがあります。どうやら、OS X 自体はこのようなファイル名に問題はありません。残念ながら、名前に<s とs が含まれているため、Windows 7 でこのファイルを開くことができないようです。>C では、この呼び出しは失敗します。

CreateFileW(
    L"\\\\VBOXSVR\\ft1\\>>>FILE<<<",
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
    );

GetLastErrorERROR_INVALID_NAME(123) を返します。ファイル名を に変更するFILEと、有効なハンドルが得られ、すべて問題ありません。

Windows で、名前に無効な文字が含まれているファイルにアクセスする既知の方法はありますか? ホストのファイル システムへの直接書き込みアクセスがない生産環境を想定します。

4

2 に答える 2

2

@jcophenhaの答えは正しい方向に進んでいました。ただし、@ jcopenhaがリンクしているページを読むと、\\?\プレフィックスはローカルパス専用であると記載されています。\\?\UNC\UNCパスの代わりにプレフィックスを使用する必要があります。例:

L"\\\\?\\UNC\\VBOXSVR\\ft1\\>>>FILE<<<"
于 2013-01-07T22:07:16.743 に答える
1

および文字は<>Windows ファイル名では使用できません。そのため、そのファイルは Win32 で開くことができません。

命名規則のドキュメントには、次の予約文字がリストされています。

  • < (未満)
  • > (より大きい)
  • : (コロン)
  • " (二重引用符)
  • / (スラッシュ)
  • \ (バックスラッシュ)
  • | | (縦棒またはパイプ)
  • ? (疑問符)
  • * (アスタリスク)

Windows は、この領域で *nix システムと大きく異なります。*nix では、通常、ファイルで使用できる文字について OS によって強制される制限はありません。私の友人は、名前の付いたファイルを削除しようとしたときに*、最も不幸な結果に苦しんだことを発見しました。

現在、ネイティブ API を使用する場合、これらの制限が適用されないことが考えられます。でファイルを開こうとすることができますNtCreateFile。それはうまくいくかもしれません!

于 2013-01-07T23:17:09.047 に答える