Código C++:
Ver original
for(int a=0;a<11;a++){ FILE *archivo; }
Como hacer lo ?
| ||||
Como hacer esto Hola necesito hacer algo asi:
Código C++:
Ver original Como hacer lo ? |
| |||
Respuesta: Como hacer esto |
| ||||
Respuesta: Como hacer esto |
| ||||
Respuesta: Como hacer esto Hola gracias a los dos, voy a usar sprintf_s es menos codigo. Ademas para strcat el int a debe de ser char y no se como convertirlo. Ya que antes probé con esta. Cuando el programa estaba listo y lo abri todo funciono bien, creo 10 archivos con los nombres bien hechos y el contenido era:
Código C++:
Ver original Osea bien, pero lo crea demasiado lento, 10 archivos como 5m cada uno de 1 mb . Hay alguna manera de hacer lo mas rápido o ocultar el cmd para que el usuario pueda hacer otras cosas mientras y el proceso no le moleste? |
| |||
Respuesta: Como hacer esto Si los archivos o los datos no tienen nada que ver entre si puedes crearlos con procesos paralelos; te puedo comentar como hacerlos desde la win32 api:
Código:
Creo que esto de los multiprocesos es dependiente del s.o., y creo recordar que mas o menos funcionan de forma parecida: puedes enviar un argumento al proceso. En este caso no puedes enviar el nombre porque es reutilizable, en cambio si que le puedes enviar el puntero de manejo del archivo porque se genero de forma dinamica. Ten en cuenta que una vez hayas abierto el 2º puntero no tendras forma de eliminar el primero porque el puntero apuntara al bloque de memoria reservado para el segundo manejador (lo mismo sucedera entre los demas y sus siguientes): por eso cierro en archivo desde el proceso ya que le envio el puntero antes de sobreescribirlo. Podrias hacer una lista dinamica con una struct de datos referentes al archivo o a los datos que debera contener de forma que pudieses enviar una referencia de cada elemento al proceso y desde el proceso mostrar mas informacion (en el ejemplo desde el proceso no puedes hacer referencia ni al nombre del archivo).unsigned long WINAPI WriteProcess(void *lpvoid) { FILE *arxptr = (FILE *)lpvoid; char bc[100000]="aasdsadasdasdadsadasdsadadad"; int b; for(b = 0; b < 10000; b++){ strcat(bc, "a"); fwrite(bc, sizeof(bc), 1, arxptr); } fclose(arxptr); printf("OK\n"); return 0; } int main() { FILE *arx; int file_ctr; char filename[80]; void *hProc; unsigned long dw; for(file_ctr = 0; file_ctr < 11; file_ctr++) { sprintf(filename, "file%d.txt", file_ctr); if((arx = fopen(filename, "wt"))) { if(!(hProc= CreateThread(NULL, 0, WriteProcess, arx, 0, &dw))) { //error en crear el proceso fclose(arx); } } else { CloseHandle(hProc); } } else { //error en crear el archivo } return 0; } Saludos vosk |
| |||
Respuesta: Como hacer esto Por cierto que se olvidaba: despues del bucle donde creas los procesos puedes poner lo que quieras y se ejecutará immediatamente sin esperar que se hayan terminado de escribir los archivos. Solo tienes que tener en cuenta que no debes acceder a los archivos porque aun no estan terminados (si los abres con las win32 api en modo de compartir lectura podras leer lo que de momento tengan escrito). Por eso si optas por los multiprocesos es importante que te crees una lista de tareas para que cada proceso pueda indicar manejar mas cosas: p.ej. una lista de structs con una ruta (o un puntero al FILE) y un estado de trabajo o un indicador de porcentaje, de esta forma cuando tengas corriendo todos los procesos podras consultar el estado de cada uno. Saludos vosk |
Etiquetas: Ninguno |