GetLongPathNameW 関数 (fileapi.h)

指定したパスを長い形式に変換します。

この操作をトランザクション操作として実行するには、 GetLongPathNameTransacted 関数を使用します。

ファイル名とパス名の詳細については、「 名前付けファイル、パス、および名前空間」を参照してください。

重要

この関数を使用するには、呼び出し元に、指定したパスと親ディレクトリに対する次のアクセス許可が必要です。

  • フォルダーの一覧表示
  • データの読み取り
  • 属性の読み取り

構文

DWORD GetLongPathNameW(
  [in]  LPCWSTR lpszShortPath,
  [out] LPWSTR  lpszLongPath,
  [in]  DWORD   cchBuffer
);

パラメーター

[in] lpszShortPath

変換するパス。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前もって指定しなくても、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 名前付けファイル、パス、および名前空間 」の「パスの最大長制限」セクションを参照してください。

[out] lpszLongPath

長いパスを受け取るバッファーへのポインター。

lpszShortPath パラメーターに使用したのと同じバッファーを使用できます。

[in] cchBuffer

TCHARlpszLongPath が指すバッファーのサイズ。

戻り値

関数が成功した場合、戻り値は lpszLongPath にコピーされた文字列の長さ (TCHAR) であり、終端の null 文字は含まれません。

lpBuffer バッファーが小さすぎてパスを格納できない場合、戻り値は、パスと終端の null 文字を保持するために必要なバッファーのサイズ (TCHAR) です。

ファイルが存在しない場合など、他の理由で関数が失敗した場合、戻り値は 0 になります。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

多くのファイル システムでは、短いファイル名にチルダ (~) 文字が含まれています。 ただし、すべてのファイル システムがこの規則に従うわけではありません。 したがって、パスにチルダ (~) 文字が含まれていない場合は 、GetLongPathName の 呼び出しをスキップできると想定しないでください。

ファイルまたはディレクトリが存在するが、長いパスが見つからない場合、 GetLongPathName は成功し、 lpszShortPath パラメーターによって参照される文字列が lpszLongPath パラメーターによって参照されるバッファーにコピーされます。

戻り値が cchBuffer で指定された値より大きい場合は、パスを保持するのに十分な大きさのバッファーを使用して関数を再度呼び出すことができます。 この例については、 GetFullPathName のコード例に関するセクションを参照してください。

メモ この場合の戻り値は終端の null 文字を含む長さですが、成功した場合の戻り値にはカウントに終端の null 文字は含まれません。
 
ファイルまたはディレクトリにアクセスできますが、そのファイルまたはディレクトリの親ディレクトリの一部にはアクセスできません。 その結果、パス コンポーネントの親ディレクトリに対してクエリを実行して、そのコンポーネントの長い名前を特定できない場合、 GetLongPathName が失敗する可能性があります。 このチェックは、ファイル拡張子が 3 文字より長いディレクトリ コンポーネント、または 12 文字を超える合計長を持つディレクトリ コンポーネントではスキップできます。 詳細については、「名前付けファイル、パス、および名前空間」の「短い名前と長い名前」セクションを参照してください。

Windows 8とWindows Server 2012では、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル はい
SMB 3.0 Transparent Failover (TFO) はい
スケールアウト ファイル共有を含む SMB 3.0 (SO) はい
クラスター共有ボリューム ファイル システム (CsvFS) はい
Resilient File System (ReFS) はい
 

GetLongPathName を使用する例については、「GetFullPathName のコード例」セクションを参照してください。

注意

fileapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetLongPathName を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー fileapi.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

ファイル管理機能

GetFullPathName

GetLongPathNameTransacted

GetShortPathName

ファイル、パス、および名前空間の名前付け