_fullpath、_wfullpath
指定された相対パス名に対応する絶対パス名、つまり完全パス名を作成します。
char *_fullpath(
char *absPath,
const char *relPath,
size_t maxLength
);
wchar_t *_wfullpath(
wchar_t *absPath,
const wchar_t *relPath,
size_t maxLength
);
パラメーター
absPath
絶対パス名つまり完全パス名を格納するバッファーへのポインター、または NULL。relPath
相対パス名。maxLength
絶対パス名のバッファー (absPath) の最大長。 _fullpath に対する長さはバイトですが、_wfullpath に対してはワイド文字 (wchar_t) です。
戻り値
これらの各関数は、絶対パス名を格納するバッファーへのポインター (absPath) を返します。 エラーが発生した場合は NULL を返します。エラーが発生する原因としては、relPath で渡した値のドライブ名が無効または見つからないことや、作成された絶対パス名 (absPath) が maxLength より長いことなどが考えられます。
解説
_fullpath 関数は、relPath で指定された相対パス名を完全パス名または絶対パス名に展開し、absPath に格納します。absPath が NULL の場合、malloc を使用してパス名を保持するために十分な長さのバッファーを割り当てます。 このバッファーは、呼び出し元が解放する必要があります。 相対パス名では、パスが現在の場所から別の場所に指定します (現在の作業ディレクトリなど。"."). 絶対パス名とは相対パス名を展開したものであり、ファイル システムのルートから目的の場所に到達するために必要なパスをすべて記述します。 _makepath とは異なり、_fullpath では、名前に "./" または "../" が含まれる相対パス (relPath) についても、絶対パスを取得できます。
たとえば、C ランタイム ルーチンを使用するには、ルーチンの宣言を含むヘッダー ファイルがアプリケーションに必要です。 ヘッダー ファイルの各 include ステートメントでは、ファイルの場所を参照するとき、次のようにアプリケーションの作業ディレクトリを起点とした相対パスで参照します。
#include <stdlib.h>
ファイルの絶対パス、つまりファイル システム内での実際の場所は次のようになります。
\\machine\shareName\msvcSrc\crt\headerFiles\stdlib.h
_fullpath は現在使用中のマルチバイト コード ページに従ってマルチバイト文字列を認識し、必要に応じてマルチバイト文字列引数を自動的に処理します。 _wfullpath は _fullpath のワイド文字バージョンであり、_wfullpath の文字列引数はワイド文字列です。 _wfullpath と _fullpath の動作は、_wfullpath がマルチバイト文字列を扱わない点を除いて同じです。
_DEBUG と _CRTDBG_MAP_ALLOC が共に定義されている場合、_fullpath と _wfullpath への呼び出しは、メモリ割り当てのデバッグのために _fullpath_dbg と _wfullpath_dbg への呼び出しで置き換えられます。 詳細については、「_fullpath_dbg、_wfullpath_dbg」を参照してください。
maxlen が 0 以下の場合、「パラメーターの検証」で説明されているように、この関数は無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は errno を EINVAL に設定し、NULL を返します。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tfullpath |
_fullpath |
_fullpath |
_wfullpath |
absPath バッファーが NULL の場合、_fullpath は malloc を呼び出してバッファーを割り当て、maxLength 引数を無視します。 このバッファーの解放は、呼び出し元で free を使用して行います。 relPath にディスク ドライブを指定した場合、このドライブの現在のディレクトリがパスに結合されます。
必要条件
機能 |
必須ヘッダー |
---|---|
_fullpath |
<stdlib.h> |
_wfullpath |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_fullpath.c
// This program demonstrates how _fullpath
// creates a full path from a partial path.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <direct.h>
void PrintFullPath( char * partialPath )
{
char full[_MAX_PATH];
if( _fullpath( full, partialPath, _MAX_PATH ) != NULL )
printf( "Full path is: %s\n", full );
else
printf( "Invalid path\n" );
}
int main( void )
{
PrintFullPath( "test" );
PrintFullPath( "\\test" );
PrintFullPath( "..\\test" );
}