67286


**Chromeエクステンションで、Windowsにファイル保存しています** 。  
そのまま保存すると、「パス＋ファイル名の長さ」が256文字を超えることがあります。  
そこで、「パス＋ファイル名の長さ」を256文字以内に抑えるために、Windowsパスの正確な長さを数えたいのですが、例えば、下記パスは何文字に該当しますか？

> L:\データ\ダウンロード\download

**取得目的**  
JavaScriptで下記のような計算をするために取得したいのですが…

[code]

    fileNameStr = '取得したファイル名',
    fileNameStr.substr(0, 256 - windowsPathLength);
    
[/code]


CC BY-SA 4.0
2020-06-04T10:34:27.350
67284
2020-06-04T20:27:31.937
7886
question
windows
Windowsパスの文字数の数え方について。「パス＋ファイル名の長さ」が256文字以内になるようにしたい


[Maximum Path Length Limitation](https://docs.microsoft.com/en-
us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation)に

> In the Windows API (with some exceptions discussed in the following
> paragraphs), the maximum length for a path is MAX_PATH, which is defined as
> 260 characters. A local path is structured in the following order: drive
> letter, colon, backslash, name components separated by backslashes, and a
> terminating null character.

とあります。

  * ドライブ名
  * コロン`:`
  * ルートディレクトリの`\`
  * パス256文字
  * NUL終端

を含めて260文字です。カウント方法としてはサロゲートペアは２文字となり。より具体的にはUTF-16エンコーディングで520バイトまでとなります。

* * *

実はファイル名としての制限ではなく、APIが受け付けるバッファーサイズとしての制限なので、あまり厳密ではなかったりします。

  * ANSIバージョンの場合、260バイト制限を受けて、日本語Shift_JISで128文字程度になることがあったりなかったり
  * Unicodeバージョンの場合、`\\?\`プレフィックスを付けることで32,767文字に緩和されたり
  * Windows 10 1607のUnicodeバージョンの場合、設定を行えば`\\?\`プレフィックスを付けなくても32,767文字に緩和されたり

といろいろあります。


CC BY-SA 4.0
2020-06-04T13:20:41.490
67286
2020-06-04T20:27:31.937
2020-06-04T20:27:31.937
4236
4236
67284
answer