[C con Clase] System

Steven Davidson steven en conclase.net
Vie Jul 13 19:28:47 CEST 2007


Hola Rafael,

El pasado 2007-07-13 16:24:31, gödel escribió:

g> Hola a toda la lista , tengo una duda con respecto a las llamadas al sistema  en c no consigo  hacer funcionar las llamadas como quiero , me explico
g> Esto es una llamada  muy fácil que funciona.
g>  system( "dir" );
g> Pero si yo quiero que me haga el dir de una ruto como:
g>  system( "dir C:/Koko/" );
g> me dice  que nanay  , las llamadas al sistema que quería usar son las siguientes:
g> MOVE
g> REMPLACE
g> A ver si alguien ya lo ha usado antes.

Esto depende del intérprete de comandos a veces llamado "shell" que uses. Según los comandos que quieres ejecutar y la aparición de "C:", deduzco que estás usando MS-DOS o lo más seguro, la consola de MS-Windows.

En cuanto al comando "dir", ten presente que MS-Windows usa las barras inversas para separar subdirectorios. Esto es, en el intérprete, escribiríamos lo siguiente:

C:\> dir C:\Koko\

En C/C++, escribirías:

system( "dir C:\\Koko\\" );

Como puedes ver, tienes que escribir dos barras inversas para obtener el carácter '\'. Recuerda que en C/C++, la barra inversa en un carácter o cadena de caracteres indica una secuencia especial.

En cuanto a los otros comandos, no puedo darte una solución específica, porque no sé cuáles son los problemas que tienes con ellos. Sospecho que el problema estaba en la forma de escribir los subdirectorios. Por si acaso te ayuda, te doy algunos ejemplos,

system( "move C:\\Koko\\prueba.txt C:\\proyecto\\Koko\\p.txt" );
system( "replace C:\\Koko\\prueba2.txt A:\\ /W /P" );

g> PD: ya puestos, alguien tiene una  función  o una biblioteca para poder sacar el maño de disco libre que te queda

Esto depende del sistema operativo que tengas al igual que las bibliotecas no estándares que quieras usar. Bajo MS-Windows, puedes usar la función 'GetDiskFreeSpaceEx()' del API de MS-Windows. Por ejemplo,

ULARGE_INTEGER nLibresParaUsuario, nTotal, nLibres;

GetDiskFreeSpaceEx( "C:\\", &nLibresParaUsuario, &nTotal, &nLibres );

printf( "Cantidad disponible para el usuario = %I64u MB\n",
        nLibresParaUsuario.QuadPart / (1024*1024) );
printf( "Cantidad total en el disco = %I64u MB\n",
        nTotal.QuadPart / (1024*1024) );
printf( "Cantidad disponible = %I64u MB\n", nLibres.QuadPart / (1024*1024) );

La función requiere punteros al tipo 'ULARGE_INTEGER' que internamente es un tipo entero de 64 bits.


Espero que esto te sirva.

Steven


Más información sobre la lista de distribución Cconclase