_fullpath、_wfullpath
更新 : 2007 年 11 月
指定された相対パス名に対応する絶対パス名、つまり完全パス名を作成します。
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" );
}
Full path is: C:\Documents and Settings\user\My Documents\test
Full path is: C:\test
Full path is: C:\Documents and Settings\user\test