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