Udostępnij za pośrednictwem


_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 Przeciążenia bezpiecznych szablonów.

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

Odpowiednik w programie .NET Framework

System::IO::File:: Utwórz

Zobacz też

Informacje

Obsługa plików

_fullpath, _wfullpath

_splitpath_s, _wsplitpath_s

_makepath, _wmakepath