Share via


_makepath_s, _wmakepath_s

Crea un nombre de ruta de componentes.Éstas son versiones de _makepath, _wmakepath con mejoras de seguridad como se describe en Características de seguridad en 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
    búfer de la ruta de acceso completa.

  • [in] sizeInWords
    Tamaño del búfer en palabras.

  • [in] sizeInBytes
    Tamaño del búfer en bytes.

  • [in] drive
    Contiene una letra (A, b, etc.) correspondiente a la unidad deseada y un signo de dos puntos final opcional._makepath_s inserta el dos puntos automáticamente en la ruta compuesta si falta.Si drive es NULL o puntos en una cadena vacía, ninguna letra de unidad aparece en la cadena compuesta de path .

  • [in] dir
    Contiene la ruta de acceso de los directorios, sin incluir el designador de unidad o el nombre del archivo.La barra diagonal final es opcional, y una barra diagonal (/) o una barra diagonal inversa (\) o ambas podrían usar en un solo argumento de dir .si no se especifica ninguna barra diagonal final (/o \), se inserta automáticamente.Si dir es NULL o puntos en una cadena vacía, no se inserta ninguna ruta de directorio en la cadena compuesta de path .

  • [in] fname
    Contiene el nombre de archivo base sin ninguna extensiones.Si fname es NULL o puntos en una cadena vacía, no se insertará ningún nombre de archivo en la cadena compuesta de path .

  • [in] ext
    Contiene la extensión de nombre de archivo real, con o sin un punto principal (.)._makepath_s inserta el período automáticamente si no aparece en ext.Si ext es NULL o puntos en una cadena vacía, no se inserta extensiones en la cadena compuesta de path .

Valor devuelto

cero si correctamente; un código de error del error.

condiciones de error

path

sizeInWords / sizeInBytes

Return

Contenido de path

NULL

cualquier

EINVAL

no modificado

cualquier

<= 0

EINVAL

no modificado

Si es un de los sobre condiciones de error, estas funciones se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, errno se estableceenEINVAL y las funciones devuelvenEINVAL**.** NULL se tienen en cuenta los parámetros drive, fname, y ext.Para obtener información sobre el comportamiento cuando estos parámetros son punteros nulos o cadenas vacías, vea la sección comentarios.

Comentarios

La función de _makepath_s crea una cadena compuesta de la ruta de acceso de los componentes individuales, almacenar el resultado en path.path podría incluir una letra de unidad, una ruta de acceso del directorio, un nombre de archivo, y una extensión de nombre de archivo._wmakepath_s es una versión con caracteres anchos de _makepath_s; los argumentos de _wmakepath_s son cadenas de caracteres._wmakepath_s y _makepath_s se comportan exactamente igual de otra manera.

Asignaciones de la rutina de texto genérico

rutina de Tchar.h

_UNICODE y _MBCS no definido

_MBCS definido

_UNICODE definido

_tmakepath_s

_makepath_s

_makepath_s

_wmakepath_s

El argumento de path debe señalar a un búfer vacío suficientemente grande para contener la ruta completa.path compuesto debe ser menor que la constante de _MAX_PATH , definido en Stdlib.h.

Si la ruta de acceso es NULL, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Además, errno se establece en EINVAL.los valores deNULL se permiten todos los demás parámetros.

En C++, mediante estas funciones es simplificado con sobrecargas de plantilla; las sobrecargas pueden deducir la longitud de búfer automáticamente (que elimina la necesidad de especificar un argumento de tamaño) y automáticamente pueden reemplazar anterior, funciones de no con sus más recientes, seguros homólogos.Para obtener más información, vea Sobrecargas de plantilla de seguridad.

Las versiones de depuración de estas funciones primero rellenan el búfer con 0xFD.Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.

Requisitos

rutina

Encabezado necesario

_makepath_s

<stdlib.h>

_wmakepath_s

<stdlib.h> o <wchar.h>

Para obtener más información de compatibilidad, vea compatibilidad en la Introducción.

Ejemplo

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

Output

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 en .NET Framework

System:: IO:: archivo:: Crear

Vea también

Referencia

El control de archivo

_fullpath, _wfullpath

_splitpath_s, _wsplitpath_s

_makepath, _wmakepath