_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