GetCurrentDirectory 関数 (winbase.h)

現在のプロセスの現在のディレクトリを取得します。

構文

DWORD GetCurrentDirectory(
  [in]  DWORD  nBufferLength,
  [out] LPTSTR lpBuffer
);

パラメーター

[in] nBufferLength

TCHAR の現在のディレクトリ文字列のバッファーの長さ。 バッファーの長さは、終端の null 文字用のスペースを含める必要があります。

[out] lpBuffer

現在のディレクトリ文字列を受け取るバッファーへのポインター。 この null で終わる文字列は、現在のディレクトリへの絶対パスを指定します。

必要なバッファー サイズを決定するには、このパラメーターを NULL に設定し、 nBufferLength パラメーターを 0 に設定します。

戻り値

関数が成功した場合、戻り値は、終端の null 文字を含めず、バッファーに書き込まれる文字数を指定します。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

lpBuffer が指すバッファーの大きさが十分でない場合、戻り値はバッファーの必要なサイズ (null 終端文字を含む) を文字数で指定します。

注釈

各プロセスには、次の 2 つの部分で構成される 1 つの現在のディレクトリがあります。

  • ドライブ文字の後にコロンが続くディスク指定子、またはサーバー名の後に共有名 (\\servername\sharename) が続くディスク指定子
  • ディスク指定子上のディレクトリ
現在のディレクトリを設定するには、 SetCurrentDirectory 関数を使用します。

マルチスレッド アプリケーションと共有ライブラリ コードでは、
GetCurrentDirectory 関数と は、相対パス名の使用を避ける必要があります。 SetCurrentDirectory 関数によって書き込まれた現在のディレクトリの状態は、各プロセスでグローバル変数として格納されるため、マルチスレッド アプリケーションでは、この値の読み取りや設定を行っている可能性がある他のスレッドからのデータ破損の可能性がなければ、この値を確実に使用することはできません。 この制限は 、SetCurrentDirectory 関数と GetFullPathName 関数にも適用されます。 例外は、アプリケーションが 1 つのスレッドで実行されていることが保証されている場合です。たとえば、追加のスレッドを作成する前に、メイン スレッドのコマンド ライン引数文字列からファイル名を解析します。 マルチスレッド アプリケーションまたは共有ライブラリ コードで相対パス名を使用すると、予期しない結果が生じる可能性があり、サポートされていません。

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

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

例については、「現在の ディレクトリの変更」を参照してください。

要件

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

関連項目

CreateDirectory

ディレクトリ管理の関数

GetSystemDirectory

GetWindowsDirectory

RemoveDirectory

SetCurrentDirectory