GetFullPathNameW 関数 (fileapi.h)
指定したファイルの完全なパスとファイル名を取得します。
この操作をトランザクション操作として実行するには、GetFullPathNameTransacted 関数を使用します。
ファイル名とパス名の詳細については、「ファイル名、パス、および名前空間のを参照してください。
構文
DWORD GetFullPathNameW(
[in] LPCWSTR lpFileName,
[in] DWORD nBufferLength,
[out] LPWSTR lpBuffer,
[out] LPWSTR *lpFilePart
);
パラメーター
[in] lpFileName
ファイルの名前。
このパラメーターには、短い (8.3 形式) または長いファイル名を指定できます。 この文字列には、共有名またはボリューム名を指定することもできます。
既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付けます。 詳細については、「ファイル、パス、および名前空間の名前付け
先端
Windows 10 バージョン 1607 以降では、事前に "\\?\" なしでMAX_PATHの制限を削除することをオプトインできます。 詳細については、「名前付けファイル、パス、および名前空間の」の「パスの最大長制限」セクションを参照してください。
[in] nBufferLength
ドライブとパスの null で終わる文字列を受け取るバッファーのサイズ (TCHAR)。
[out] lpBuffer
ドライブとパスの null で終わる文字列を受け取るバッファーへのポインター。
[out] lpFilePart
パス内の最終的なファイル名コンポーネントのアドレス (lpBuffer内
このパラメーターは NULL
lpBuffer
戻り値
関数が成功した場合、戻り値は、終端の null 文字を含まない、lpBufferにコピーされた文字列の長さ (
lpBuffer バッファーが小さすぎてパスを格納できない場合、戻り値は、パスと終端の null 文字を保持するために必要なバッファーのサイズ (TCHAR) です。
その他の理由で関数が失敗した場合、戻り値は 0 になります。 拡張エラー情報を取得するには、GetLastError
備考
GetFullPathName は、現在のドライブとディレクトリの名前を指定したファイル名とマージして、指定したファイルの完全なパスとファイル名を決定します。 また、完全パスとファイル名のファイル名部分のアドレスも計算されます。
この関数は、結果のパスとファイル名が有効であること、または関連するボリューム上の既存のファイルが表示されることを確認しません。
lpFilePart パラメーターには文字列バッファー領域は必要ありませんが、1 つのアドレスに対してのみ十分です。 これは、lpBufferに対して既に存在するバッファー内のアドレス
共有名とボリューム名は、lpFileName
- "\\test-2\q$\lh" を指定すると、返されるパスは "\\test-2\q$\lh" になります。
- "\\?\UNC\test-2\q$\lh" を指定すると、返されるパスは "\\?\UNC\test-2\q$\lh" になります。
- "U:" を指定した場合、返されるパスは "U:\" ドライブ上の現在のディレクトリです
戻り値が nBufferLengthで指定
GetFullPathName 関数に渡される相対パスは、プロセスの現在のディレクトリに対する相対パスとして解釈されます。 SetCurrentDirectory 関数によって書き込まれた現在のディレクトリの状態は、プロセスに対してグローバルであり、任意のスレッドでいつでも変更できます。 アプリケーションでは、GetFullPathName 関数を相対パスで連続して呼び出すと、2 つの呼び出しの間で現在のディレクトリが変更された場合に異なる結果が生成される可能性があることに注意する必要があります。
一貫性のない結果が原因で発生する問題を回避するには、マルチスレッド アプリケーションと共有ライブラリ コードで相対パスを使用しないようにする必要があります。 相対パスを受け取った場合は、相対パスを CreateFileなどの関数に直接渡すか、絶対パスに変換してそのポイントの絶対パスを使用して、1 回だけ使用する必要があります。
Windows 8 および Windows Server 2012 では、この関数は次のテクノロジでサポートされています。
テクノロジー | サポート |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 透過的フェールオーバー (TFO) | はい |
SMB 3.0 とスケールアウト ファイル共有 (SO) | はい |
クラスター共有ボリューム ファイル システム (CsvFS) | はい |
回復性のあるファイル システム (ReFS) | はい |
例
次の C++ の例は、
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define BUFSIZE 4096
#define LONG_DIR_NAME TEXT("c:\\longdirectoryname")
void _tmain(int argc, TCHAR *argv[])
{
DWORD retval=0;
BOOL success;
TCHAR buffer[BUFSIZE]=TEXT("");
TCHAR buf[BUFSIZE]=TEXT("");
TCHAR** lppPart={NULL};
if( argc != 2 )
{
_tprintf(TEXT("Usage: %s [file]\n"), argv[0]);
return;
}
// Retrieve the full path name for a file.
// The file does not need to exist.
retval = GetFullPathName(argv[1],
BUFSIZE,
buffer,
lppPart);
if (retval == 0)
{
// Handle an error condition.
printf ("GetFullPathName failed (%d)\n", GetLastError());
return;
}
else
{
_tprintf(TEXT("The full path name is: %s\n"), buffer);
if (lppPart != NULL && *lppPart != 0)
{
_tprintf(TEXT("The final component in the path name is: %s\n"), *lppPart);
}
}
// Create a long directory name for use with the next two examples.
success = CreateDirectory(LONG_DIR_NAME,
NULL);
if (!success)
{
// Handle an error condition.
printf ("CreateDirectory failed (%d)\n", GetLastError());
return;
}
// Retrieve the short path name.
retval = GetShortPathName(LONG_DIR_NAME,
buf,
BUFSIZE);
if (retval == 0)
{
// Handle an error condition.
printf ("GetShortPathName failed (%d)\n", GetLastError());
return;
}
else _tprintf(TEXT("The short name for %s is %s\n"),
LONG_DIR_NAME, buf);
// Retrieve the long path name.
retval = GetLongPathName(buf,
buffer,
BUFSIZE);
if (retval == 0)
{
// Handle an error condition.
printf ("GetLongPathName failed (%d)\n", GetLastError());
return;
}
else _tprintf(TEXT("The long name for %s is %s\n"), buf, buffer);
// Clean up the directory.
success = RemoveDirectory(LONG_DIR_NAME);
if (!success)
{
// Handle an error condition.
printf ("RemoveDirectory failed (%d)\n", GetLastError());
return;
}
}
手記
fileapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetFullPathName を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリ |UWP アプリ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリ |UWP アプリ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | fileapi.h (Windows.h を含む) |
ライブラリ | Kernel32.lib |
DLL | Kernel32.dll |
関連項目
GetFullPathNameTransacted の
GetLongPathName を
GetShortPathName を
GetTempPath を