Partilhar via


_makepath_s, _wmakepath_s

Cria um nome de caminho a partir de componentes.Estas são as versões do _makepath, _wmakepath com aprimoramentos de segurança, conforme descrito em Recursos de segurança no 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

Parâmetros

  • [out]path
    Buffer de caminho completo.

  • [in]sizeInWords
    Tamanho do buffer em palavras.

  • [in]sizeInBytes
    Tamanho do buffer em bytes.

  • [in]drive
    Contém uma letra (A, B e assim por diante) correspondente a unidade desejada e uma vírgula à direita opcional._makepath_sinsere automaticamente os dois-pontos no caminho composto se ele estiver ausente.Se drive é NULL ou aponta para uma seqüência vazia, nenhuma letra de unidade aparece composição path seqüência de caracteres.

  • [in]dir
    Contém o caminho de diretórios, não incluindo o designador de unidade ou o nome de arquivo real.A barra à direita é opcional e uma barra (/) ou uma invertida () ou ambos podem ser usados em um único dir argumento.Se nenhuma barra à direita (/ ou \) for especificado, ele é inserido automaticamente.Se dir é NULL ou aponta para uma seqüência vazia, nenhum caminho de diretório está inserido na composição path seqüência de caracteres.

  • [in]fname
    Contém o nome do arquivo de base sem qualquer extensão de nome de arquivo.Se fname é NULL ou aponta para uma seqüência vazia, nenhum nome de arquivo é inserido na composição path seqüência de caracteres.

  • [in]ext
    Contém a extensão de nome de arquivo real, com ou sem um ponto à esquerda (.)._makepath_sInsere o período automaticamente se ele não aparecer na ext.Se ext é NULL ou aponta para uma seqüência vazia, sem extensão é inserido na composição path seqüência de caracteres.

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

Conteúdo depath

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 chamar o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, errno for definido comoEINVAL e as funções retornaEINVAL**.** NULLé permitido para os parâmetros drive, fname, e ext.Para obter informações sobre o comportamento quando esses parâmetros são ponteiros nulos ou seqüências vazias, consulte a seção comentários.

Comentários

O _makepath_s função cria uma seqüência de caracteres do caminho composto dos componentes individuais, armazenando o resultado em path.O path pode incluir uma letra de unidade, caminho de diretório, nome de arquivo e extensão de nome de arquivo._wmakepath_sé uma versão de caractere largo de _makepath_s; os argumentos para _wmakepath_s são seqüências de caracteres largos._wmakepath_se _makepath_s tenham comportamento idêntico caso contrário.

Mapeamentos de rotina de texto genérico

Rotina de TCHAR.h

_ Unicode e _ MBCS do arquivo não definido

_ MBCS do arquivo definido

_ Unicode definido

_tmakepath_s

_makepath_s

_makepath_s

_wmakepath_s

O path argumento deve apontar para um buffer vazio grande o suficiente para conter o caminho completo.O composto path deve ser maior do que o _MAX_PATH constante, definido em Stdlib.h.

Se o caminho é NULL, o manipulador de parâmetro inválido é invocado, conforme descrito em Validação de parâmetro.Além disso, errno for definido como EINVAL.NULLsão permitidos valores para todos os outros parâmetros.

No C++, a utilização dessas funções é simplificado pela sobrecargas do modelo; os métodos sobrecarregados podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e eles podem substituir automaticamente os funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.Para obter mais informações, consulte Proteger Overloads de modelo.

As versões de depuração dessas funções primeiro preenchem o buffer com 0xFD.Para desativar 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

Equivalência do .NET Framework

System::IO::File:: criar

Consulte também

Referência

Manipulação de arquivos

_fullpath, _wfullpath

_splitpath_s, _wsplitpath_s

_makepath, _wmakepath