_makepath_s, _wmakepath_s
Tworzy nazwę ścieżki z komponentów.Są to wersje _makepath, _wmakepath z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w 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
Parametry
[out]path
Bufor pełną ścieżkę.[w]sizeInWords
Rozmiar buforu w słowach.[w]sizeInBytes
Rozmiar buforu w bajtach.[w]drive
Zawiera litery (A, B i tak dalej) odpowiadającą żądany dysk i opcjonalne końcowe dwukropka._makepath_sWstawia dwukropek automatycznie ścieżki kompozytowej jeżeli go brakuje.Jeśli drive jest NULL lub punktów na pusty ciąg, bez litery dysku pojawia się w kompozytowych path ciąg znaków.[w]dir
Zawiera ścieżkę katalogów, nie włączając faktyczny dysku lub rzeczywistą nazwę pliku.Znaku kreski ułamkowej jest opcjonalny i ukośnika (/) lub kreski ułamkowej odwróconej (\) lub oba może być używany w jednym dir argument.Jeśli nie ukośnika (/ lub \) jest określony, jest wstawiany automatycznie.Jeśli dir jest NULL lub w kompozytowych dodaje się punkty na pusty ciąg, żadna ścieżka katalogu path ciąg znaków.[w]fname
Zawiera nazwę pliku podstawowego bez żadnych rozszerzeń nazw plików.Jeśli fname jest NULL lub w kompozytowych dodaje się punkty na pusty ciąg, żadnej nazwy pliku path ciąg znaków.[w]ext
Zawiera rozszerzenie nazwy pliku rzeczywiste, z lub bez kropki (.)._makepath_sautomatycznie wstawia okresu, jeśli nie są wyświetlane w ext.Jeśli ext jest NULL lub w kompozytowych dodaje się punkty na pusty ciąg, bez rozszerzenia path ciąg znaków.
Wartość zwracana
Zero, jeśli kończy się pomyślnie; Kod błędu w przypadku awarii.
Warunki błędów
path |
sizeInWords / sizeInBytes |
Zwrot |
Zawartośćpath |
---|---|---|---|
NULL |
wszelkie |
EINVAL |
Nie zmodyfikowano |
wszelkie |
< = 0 |
EINVAL |
Nie zmodyfikowano |
Jeśli występuje którykolwiek z powyższych warunków błąd, te funkcje wywołania obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie jest dozwolone, aby kontynuować, errno jest ustawiona naEINVAL i zwraca wartość funkcjiEINVAL**.** NULLjest dozwolona dla parametrów drive, fname, i ext.Aby uzyskać informacje o zachowaniu podczas tych parametrów są wskaźniki zerowe lub puste ciągi, zobacz sekcję Spostrzeżenia.
Uwagi
_makepath_s Funkcja tworzy ciąg ścieżki kompozytowej z poszczególnych składników, przechowywanie wyników w path.path Może zawierać literę dysku, ścieżki katalogu, nazwę pliku i rozszerzenie nazwy pliku._wmakepath_sjest to wersja szerokich znaków _makepath_s; argumenty do _wmakepath_s są ciągami szerokich znaków._wmakepath_si _makepath_s zachowują się identycznie inaczej.
Tekst rodzajowy rutynowych mapowania
Procedura TCHAR.h |
_UNICODE i _MBCS nie zdefiniowane |
_MBCS, definicja |
_UNICODE, definicja |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
path Argument musi wskazywać pusty buforu wystarczająco duży, aby pomieścić pełną ścieżkę.Projekt wstępny path musi być większa niż _MAX_PATH stałą, zdefiniowane w plik Stdlib.h.
Jeśli ścieżka jest NULL, wywoływana jest funkcja obsługi nieprawidłowy parametr, jak opisano w Sprawdzanie poprawności parametru.Ponadto errno jest ustawiona na EINVAL.NULLwartości są dozwolone dla wszystkich innych parametrów.
W języku C++ korzystając z tych funkcji jest uproszczona poprzez overloads szablonu; overloads można automatycznie rozpoznać długość buforu (eliminując konieczność należy określić argument rozmiar) i automatycznie można zastąpić starszych, które nie są bezpieczne funkcje z ich odpowiednikami nowsze, bezpieczne.Aby uzyskać więcej informacji, zobacz Secure, szablon Overloads.
Wersje do debugowania te funkcje najpierw wypełnić bufor z 0xFD.Aby wyłączyć to zachowanie, należy użyć _CrtSetDebugFillThreshold.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> lub <wchar.h> |
Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.
Przykład
// 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 );
}
Dane wyjściowe
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