Wenas :P, tengo un pequeño problema con las funciones WriteFile,CreateFile y ReadFile. Basicamente lo que hace el programa es abre un archivos binario cualquiera , lo va leyendo y copiando en un nuevo archivos.
El problema que tengo es que el programa no para de escribir osea abre una foto de 100 Kb y copia hasta que yo lo pare ( El nuevo archivo llego a pesar 25 megas :P )
Estoy programando para windows en C
no se si necesitan algo mas pero cualquier ayuda o consejo es bienvenido :P
Un abrazo
Eddie
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define BUFFER_SIZE 512
main()
{
HANDLE hFile;
HANDLE hFile2;
DWORD dwBytesRead = 0;
char ReadBuffer[BUFFER_SIZE] = {0};
char DataBuffer[512];
DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer);
DWORD dwBytesWritten = 0;
printf("\n");
/************** Creacion de archivos para lectura y escritura ************/
if ((hFile = CreateFile("Historias nuevas (Highway Blues).wma", // Nombre del archivo a abrir
GENERIC_READ, // Abrir para leer
0, //Sin compartir
NULL, //Seguridad por defecto
OPEN_EXISTING, //Abrir solo si el archivo existe
FILE_ATTRIBUTE_NORMAL, //Archivo normal
NULL))<0) //Sin atributos
{
printf("open failed on input file" );
exit(1);
}
if
((hFile2=CreateFile("Historias nuevas (Highway Blues)2.wma", //Nombre del archivo nuevo
GENERIC_WRITE, //Abrir para escribir
0, //Sin compartir
NULL, //Seguridad por defecto
CREATE_ALWAYS, //Sobreescribi si existe
FILE_ATTRIBUTE_NORMAL, //Archivo normal
NULL) )<0) //Sin atributos
{
printf(
"Error en la creacion del archivo %d)\n", GetLastError());
return;
}
/*************** Lectura y escritura de los archivos ****************/
while ((ReadFile(hFile, ReadBuffer, BUFFER_SIZE-2, &dwBytesRead, NULL))>0)
{
if (dwBytesRead > 0)
{
ReadBuffer[dwBytesRead+1]='0'; // NULL
printf(TEXT("Writing %d bytes .\n"), dwBytesToWrite);
}
else
{
printf(TEXT("Nada fue leido del archivo \n"));
}
WriteFile(hFile2,// Abre el descriptor
DataBuffer + dwBytesWritten,// Info a escribir
dwBytesToWrite - dwBytesWritten,// numero de bytes a escribir
&dwBytesWritten,// numero de bytes escritos
NULL); // Sin overlap
printf(TEXT("Wrote %d bytes successfully.\n"), dwBytesWritten);
}
CloseHandle(hFile);
CloseHandle(hFile2);
}