Compartilhar via


_makepath_s, _wmakepath_s

Crie um nome de caminho de componentes.Essas são sistema autônomo versões de _makepath, _wmakepath com aprimoramentos de segurança conforme descrito em Aprimoramentos de segurança no CRT.

errno_t _makepath_s(
   char *path,
   size_t sizeInWords,
   const char *drive,
   const char *dir,
   const char *fname,
   const char *ext 
);
errno_t _wmakepath_s(
   wchar_t *path,
   size_t sizeInBytes,
   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

Parâmetros

  • [out] path
    Buffer de caminho completo.

  • [in]sizeInWords
    dimensionar do buffer em palavras.

  • [in]sizeInBytes
    dimensionar do buffer em bytes.

  • [in]drive
    Letra da unidade.

  • [in]dir
    Caminho de diretório.

  • [in]fname
    Nome de arquivo.

  • [in]ext
    Extensão de nome de arquivo.

Valor de retorno

Zero se for bem-sucedida; um código de erro em caso de falha.

Condições de erro

path

sizeInWords / sizeInBytes

Return

Sumário de path

NULL

any

EINVAL

não modificado

any

<= 0

EINVAL

não modificado

Se ocorrer qualquer uma das condições de erro acima, essas funções invoca o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. If execution is allowed to continue, errno is set toEINVAL and the functions returnsEINVAL**. NULL é permitido para os parâmetros drive, fname, e ext.** Para obter informações sobre o comportamento quando esses parâmetros são ponteiros nulo ou seqüências de caracteres vazias, consulte a seção comentários.

Comentários

The _makepath_s função cria um único caminho e o armazena no path. O caminho pode conter uma letra da unidade, caminho de diretório, nome de arquivo e extensão de nome de arquivo._wmakepath_sé uma versão de caractere largo da _makepath_s; os argumentos para _wmakepath_ssão seqüências de caracteres largos. _wmakepath_s e _makepath_s tenham comportamento idêntico caso contrário.

Mapeamentos de rotina de texto genérica

Rotina tchar.h

_UNICODE e _MBCS não definido

_MBCS definido

_UNICODE definido

_tmakepath_s

_makepath_s

_makepath_s

_wmakepath_s

Os argumentos a seguir apontam para buffers que contém os elementos de caminho.

  • drive
    Contém uma letra (A, B e assim por diante) correspondente na unidade desejada e um opcional dois-pontos à direita._makepath_s Insere o dois-pontos automaticamente no caminho composto se ele estiver ausente. If drive é um caractere nulo ou uma seqüência vazia, nenhuma letra da unidade e dois-pontos aparecem na composição path seqüência de caracteres.

  • dir
    Contém o caminho de diretórios, não incluindo o designador de unidade ou nome de arquivo real.barra / / / à direita é opcional e uma barra / / (/) ou uma barra / / invertida (\) ou ambos podem ser usados em um único dir argumento. Se uma barra / à direita (/ ou \) não for especificado, ele é inserido automaticamente.If dir é um caractere nulo ou uma seqüência vazia, nenhuma barra / é inserida na composição path seqüência de caracteres.

  • fname
    Contém o nome de arquivo base sem quaisquer extensões.If fname é NULL ou aponta para uma seqüência vazia, nenhum nome de arquivo é inserido na composição path seqüência de caracteres.

  • ext
    Contém a extensão de nome de arquivo real, com ou sem um ponto (.) entrelinhamento._makepath_s Insere o período automaticamente se não for exibido no ext. If ext é um caractere nulo ou uma seqüência vazia, nenhum período é inserido na composição path seqüência de caracteres.

The path argumento deve apontar para um buffer vazio grande o suficiente para conter o caminho completo. Embora existam sem limites de dimensionar em qualquer um dos campos que constituem o path, a composição path deve ser maior do que o _MAX_PATH constante, definido em Stdlib.h. _MAX_PATH pode ser maior do que pode lidar com a versão corrente do sistema operacional.

No C++, usando essas funções é simplificado pelo modelo sobrecargas; sobrecargas de podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de dimensionar) e eles podem substituir automaticamente funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.For more information, see Proteger overloads de modelo.

As versões de depurar dessas funções primeiro preenchem o buffer com 0xFD.Para desabilitar esse comportamento, use _CrtSetDebugFillThreshold.

Requisitos

Rotina

Cabeçalho necessário

_makepath_s

<stdlib.h>

_wmakepath_s

<stdlib.h> ou <wchar.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Exemplo

// 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 );
}

Saída

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

Equivalente do NET Framework

sistema::IO::arquivo:: criar

Consulte também

Referência

Manipulação de arquivos

_fullpath, _wfullpath

_splitpath_s, _wsplitpath_s

_makepath, _wmakepath