[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