共用方式為


_makepath_s _wmakepath_s

從元件中建立的路徑名稱。 這些是舊版 _makepath、 _wmakepath 中所述的安全性增強功能與安全性功能,則在 CRT 中

errno_t _makepath_s(
   char *path,
   size_t sizeInBytes,
   const char *drive,
   const char *dir,
   const char *fname,
   const char *ext 
);
errno_t _wmakepath_s(
   wchar_t *path,
   size_t sizeInWords,
   const wchar_t *drive,
   const wchar_t *dir,
   const wchar_t *fname,
   const wchar_t *ext 
);
template <size_t size>
errno_t _makepath_s(
   char (&path)[size],
   const char *drive,
   const char *dir,
   const char *fname,
   const char *ext 
); // C++ only
template <size_t size>
errno_t _wmakepath_s(
   wchar_t (&path)[size],
   const wchar_t *drive,
   const wchar_t *dir,
   const wchar_t *fname,
   const wchar_t *ext 
); // C++ only

參數

  • [out] path
    完整路徑的緩衝區。

  • [in] sizeInWords
    在文字緩衝區的大小。

  • [in] sizeInBytes
    緩衝區的大小以位元組為單位。

  • [in] drive
    包含字母 (A、 B 等等) 對應到您想要的磁碟機,並選擇性的後端冒號。 _makepath_s如果遺失,請自動插入複合路徑中的冒號。 如果drive是NULL點設為空字串,沒有磁碟機代號會顯示在複合稿或path的字串。

  • [in] dir
    包含不包括磁碟機指定代碼或實際的檔名的目錄路徑。 結尾的斜線是選擇性的且正斜線 (/) 或反斜線 (\),或兩者皆可能用於單一dir引數。 如果結尾沒有斜線 (/ 或 \) 指定,則它會自動插入。 如果dir是NULL或複合稿在插入點設為空字串,而沒有目錄路徑path的字串。

  • [in] fname
    包含的主檔名,沒有任何檔案的副檔名。 如果fname是NULL或複合稿在插入點設為空字串,而沒有檔名path的字串。

  • [in] ext
    包含實際的檔案名稱副檔名,不論有前置句號 (.)。 _makepath_s自動插入期間,如果它不會出現在ext。 如果ext是NULL的複合稿在插入點設為空字串,而沒有副檔名或path的字串。

傳回值

如果成功 ;,零 錯誤碼錯誤所致。

錯誤狀況

path

sizeInWords / sizeInBytes

Return

內容path

NULL

任何

EINVAL

不能修改

任何

< = 0

EINVAL

不能修改

如果任何上述的錯誤狀況發生時,這些函式叫用無效的參數處理常式中,如所述參數驗證。 如果要繼續,請允許執行errno設定為 [EINVAL和函式會傳回EINVAL**.** NULL允許參數的drive, fname,以及ext。 有關的行為時這些參數是 null 指標或空字串,請參閱 < 備註 > 一節。

備註

_makepath_s函式會建立複合路徑字串從個別的元件,並且在將結果儲存path。 path可能包括磁碟機代號、 目錄路徑、 檔名和副檔名。 _wmakepath_s寬字元版本的**_makepath_s**。 引數去**_wmakepath_s是寬字元字串。 _wmakepath_s_makepath_s**其他方式完全相同。

泛用文字常式對應

Tchar.h 常式

_Unicode 之後,未定義的 _MBCS

定義的 _MBCS

定義 _unicode 之後

_tmakepath_s

_makepath_s

_makepath_s

_wmakepath_s

path引數必須指向一個空的緩衝區不夠大,無法容納的完整路徑。 綜合path必須不大於_MAX_PATH Stdlib.h 中定義的常數。

如果路徑為NULL,不正確的參數處理常式會叫用,如所述參數驗證。 此外, errno設定為 [ EINVAL。 NULL針對所有其他參數允許的值。

在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以自動推斷緩衝區長度 (而不必指定 size 引數),它們可以自動取代較舊的、 不安全的函式與其較新的、 安全的對應項目。 如需詳細資訊,請參閱 安全範本多載

這些函式的偵錯版本第一次填滿與 0xFD 的緩衝區。 若要停用這種情形,請使用_CrtSetDebugFillThreshold

需求

常式

所需的標頭

_makepath_s

<stdlib.h>

_wmakepath_s

<stdlib.h> 或者 <wchar.h>

如需相容性資訊,請參閱相容性在簡介中。

範例

// crt_makepath_s.c

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char path_buffer[_MAX_PATH];
   char drive[_MAX_DRIVE];
   char dir[_MAX_DIR];
   char fname[_MAX_FNAME];
   char ext[_MAX_EXT];
   errno_t err;

   err = _makepath_s( path_buffer, _MAX_PATH, "c", "\\sample\\crt\\",
                      "crt_makepath_s", "c" );
   if (err != 0)
   {
      printf("Error creating path. Error code %d.\n", err);
      exit(1);
   }
   printf( "Path created with _makepath_s: %s\n\n", path_buffer );
   err = _splitpath_s( path_buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,
                       _MAX_FNAME, ext, _MAX_EXT );
   if (err != 0)
   {
      printf("Error splitting the path. Error code %d.\n", err);
      exit(1);
   }
   printf( "Path extracted with _splitpath_s:\n" );
   printf( "  Drive: %s\n", drive );
   printf( "  Dir: %s\n", dir );
   printf( "  Filename: %s\n", fname );
   printf( "  Ext: %s\n", ext );
}

Output

Path created with _makepath_s: c:\sample\crt\crt_makepath_s.c

Path extracted with _splitpath_s:
  Drive: c:
  Dir: \sample\crt\
  Filename: crt_makepath_s
  Ext: .c

.NET Framework 對等用法

System::IO::File:: 建立

請參閱

參考

檔案處理

_fullpath _wfullpath

_splitpath_s _wsplitpath_s

_makepath _wmakepath