マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • GitHubのリポジトリに登録した物件をダウンロードした際、
    取得したZIPファイルが解凍できないなどの問題があったので調査をしてみた。
  • ココの問題は、コンピュータに保存されているファイルの識別に用いられる「パス名」に起因する。
    • パス名は,ドライブ文字、ディレクトリパス、ファイル名などを一定の記法に従って連結して表記したもの。
    • Windowsのパス名には少々複雑な事情があり、さまざまな注意が必要。

詳細

要因

以下の2つの要因がある(実はファイルシステム側の問題ではなかった)。

ソフトウェアにパス長の制限がある。

Windowsの後方互換でパス長の制限があるためパス長の制限があるソフトウェアが現存する。

  • NTFSファイルシステムが32K文字までのパスをサポートしている。
  • しかし、Windows APIは、後方互換性を重視するため、
    • パス最大長がMAX_PATH環境変数で260文字に設定されている。
    • パスに " \\?\ "接頭辞を使用すると、260文字を超える文字を使用できる。
    • しかし、一部のWin32 APIでは" \\?\ "接頭辞を使用しても制限が解除されない。

というトコロに原因があるもよう。

  • Windows 10 Version 1607以降、MAX_PATHの制限を解除できる。
    • レジストリ修正
    • 若しくは、グループポリシー

全角文字を理解しないソフトウェアがある。

例えば以下のような例。

  • インテル ソフトウェア開発製品 日本語環境でのご注意 | XLsoft エクセルソフト Intel
    https://www.xlsoft.com/jp/products/intel/tech/win_jp_limitation.html
    • プログラム中のファイル入出力について、
      フォルダー名に日本語を含むと正常に動作しない。
    • Microsoft* Visual Studio* 上でのデバッグ操作において、
      • フォルダー名に日本語がある場合や、
      • ソースコードのファイル名に日本語を含むと、

ブレークポイントが機能しない

  • , etc.

対策

ソフトウェアで対応(ZIPの場合)

  • 上記の双方(パス長全角文字)とも、ソフトウェアが対応すれば済む。
  • 例えば、ZIPであれば7-Zip、WinRARがコレらの問題に対応している。

パスを変更する。

  • パスを短くする。
    出力パスが短くなるようにする。
    =圧縮した一式の解凍先を「C:\temp」などとする。
  • パスの全角文字を除く。

その他

以下のようなトピックもある模様。

サービス機能

  • パス名の解釈に伴う「サービス機能」がある。
  • CreateFile?( )にはいくつものサービス機能がある。

機能一覧(一部)

  1. ディレクトリ区切り文字「/」が使用できる。
  2. ディレクトリ区切り文字の重複「\\」が許される。
  3. パス名の途中に \.\ を差し挟める。
  4. パス名の途中に \..\ を差し挟める。
  5. パス名の末尾の「.」や半角スペースが無視される。

不活性化

「\\?\」から始まるパス名についてはサービス機能が働かなくなる。

ショートネーム

Windowsのファイルやディレクトリは

  • ロングネームと
  • そのロングネームから自動生成されたショートネーム(8.3形式)

の2つを持つ。

ショートネーム機能のOFF

レジストリのNtfsDisable8dot3NameCreation?で自動生成をOFFにできる。

ショートネームの排除

  • パス名に「~」が含まれていたらショートネームが混入されていると見なす。
  • APIでショートネームをロングネームに変換するようにする。

ストリーム

ファイル名に「:」が含まれていると具合が悪い。

予約デバイス名

  • MS-DOSの時代に用いられていた古典的な名称
    • コンソール
    • シリアル通信ポート
    • プリンタポートなど
  • 次の名前はディレクトリやファイルの名前には使ってはならない
    • AUX
    • CON
    • NUL
    • PRN
    • CLOCK$
    • COM1~COM9
    • LPT1~LPT9
  • 10番以降のデバイス
    先頭に\\.\を付ける。

参考

パス長の制限

現象

ZIP

  • Windows XP で ZIP 形式のファイルを解凍すると、
    "指定されたファイルが見つかりません" と
    エラー メッセージが表示されてファイルの解凍ができない場合がある
    https://support.microsoft.com/ja-jp/help/978341

・・・

  • 色々書き足して行こうと考えていたけど、良いネタが無いかも。
  • 最近遭遇した、減少に、フォルダ名にC#の「#」が混在していると.NET CoreのBuildに失敗するというのがあった。

その他

8.3形式

代替データストリーム(ADS)

ADS: Alternate Data Stream


Tags: :インフラストラクチャ, :Windows


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-28 (日) 17:20:15 (50d)