2011-09-25 9 views

Respuesta

10

Consiguen el mismo resultado pero pertenecen a diferentes API, por lo que devuelven sus resultados e informan los errores de diferentes maneras.

Si ya está utilizando otras rutinas de cualquiera de las API, elija esa. Si no, SetCurrentDirectory() es más "Windowsy", mientras que _chdir() es más similar a la API POSIX. Si tiene intención de portar el código a, por ejemplo, una plataforma Linux, use _chdir(); si sabe que solo ejecutará el código en las plataformas de Windows, SetCurrentDirectory().

0

SetCurrentDirectory es una macro que se resolverá en SetCurrentDirectoryA o SetCurrentDirectoryW dependiendo de la configuración de compilación. No hay macro proporcionada por el sistema para _chdir y _wchdir.

El MSDN page for SetCurrentDirectory indica que el argumento puede ser relativo al directorio de trabajo actual o absoluto. La documentación para _chdir no lo dice de ninguna manera, aunque parece que sí Can chdir() accept relative paths? en Linux.

7

_chdir realmente usa SetCurrentDirectory internamente, por lo que en la mayoría de los casos son efectivamente intercambiables. Sin embargo, _chdir hace una cosa más: actualiza el directorio actual de la unidad actual, almacenado en una variable de entorno. Esto es necesario, como dice la observación en _tchdir, porque "otras funciones (ruta completa, engendro, etc.) necesitan que se establezcan".

No estoy seguro de cuánto se necesita en estos días, pero diría que si está usando esas funciones de estilo POSIX para operaciones de archivos, manipulación de rutas, creación de procesos, etc., use _chdir en consecuencia. Si está utilizando funciones de API de Win32 directamente, use SetCurrentDirectory.

+0

¿Es el mismo directorio * fake * por unidad que utiliza el intérprete cmd.exe? –

+0

@DavidHeffernan, no estoy seguro de entender su pregunta (¿podría reformularla?), Pero creo que la respuesta es sí; utiliza las extrañas variables de entorno "= C", que de acuerdo con [esto] (http://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx) también son utilizados por cmd. – eran

+0

Sí, eso es lo que quiero decir y Raymond explica a qué me refiero al fingir –

Cuestiones relacionadas