Top / TIPS / 長いファイル名

File Name Conventions

MSDN ライブラリの、CreateFile API の パラメータ lpFileName の説明には、こうあります。

「Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。 この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "¥¥?¥" という接頭辞を追加してください。 詳細については、MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。 」

なんと、ファイル名は、32,000 文字もの長さを扱えるのです。

そこで、File Name Conventions という項目を見てみると、以下のことがわかります。

ローカルファイル名に対しては、「¥¥?¥」を付加する
例:¥¥?¥C:¥temp¥file.txt

UNC名(ネットワークファイル名)に対しては、「¥¥?¥UNC¥」を付加する
例:¥¥?¥UNC¥サーバー名¥シェア名¥file.txt

API にファイル名を渡すときは、こんな関数を作っておくといいのかなと思います。

Private Const cPrefixNarrowUNC  As String = "\\"
Private Const cPrefixWideFile   As String = "\\?\"
Private Const cPrefixWideUNC    As String = "\\?\UNC\"

'   ファイル名を32000文字対応のファイル名に
Public Function GetWideFileName(ByVal iFileName As String) As String

    If Left(iFileName, Len(cPrefixWideFile)) = cPrefixWideFile Then
        ' すでに 32000文字対応のファイル名
        GetWideFileName = iFileName

    ElseIf Left(iFileName, Len(cPrefixNarrowUNC)) = cPrefixNarrowUNC Then
        ' UNC
        GetWideFileName = cPrefixWideUNC _
                   & Mid(iFileName, Len(cPrefixNarrowUNC) + 1)
    Else
        ' 普通のファイル名
        GetWideFileName = cPrefixWideFile & iFileName
    End If

End Function



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2009-10-31 (土) 00:07:24 (2913d)