Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: XKC en 30 Agosto 2018, 20:44 PM

Título: Editar fichero win32
Publicado por: XKC en 30 Agosto 2018, 20:44 PM
Hola buenas,
estoy trabajando con la API de windows.
Bien, la cuestion es que quiero editar un fichero.
Lo abro con CreateFileW asi:

HANDLE hInpFile = CreateFileW(filename, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);


Ahora, quiero leer y escribir a la vez sobre el, esto seria, leo los X primeros bytes(trato el fichero como binario), los edito en el buffer y quiero volver a escribirlos en su correspondiente posicion.

while (bResult = ReadFile(hInpFile, chunk, chunk_size, &out_len, NULL)) {
if (0 == out_len) break;

readTotalSize += out_len;
if (readTotalSize == inputSize) isFinal = TRUE;

        // Aqui edito chunk

if (!WriteFile(hInpFile, chunk, sizeof(chunk), &written, NULL)) break;
memset(chunk, 0, chunk_size);
}

La cuestion es que esta fallando por algun motivo, en concreto para un archivo con el texto HOLA MUNDO me añade la edicion detras del mismo y no lo sobreescribe, total queda algo asi.
Fichero original

HOLA MUNDO
HOLA MUNDO


Resultado que obtengo:

HOLA MUNDO XXXXXXXXXXXXXXXXXX
HOLA MUNDO XXXXXXXXXXXXXXXXXX


Resultado que espero:

XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX


Comentar que se que esto la manera de hacerlo correctamente seria con un stream, pero en este caso necesito utilizar estas funciones de la API.
Muchas gracias
Título: Re: Editar fichero win32
Publicado por: ivancea96 en 30 Agosto 2018, 21:02 PM
El resultado que obtienes es igual al que esperas?
Título: Re: Editar fichero win32
Publicado por: XKC en 30 Agosto 2018, 21:06 PM
Cita de: ivancea96 en 30 Agosto 2018, 21:02 PM
El resultado que obtienes es igual al que esperas?
No, perdona, edito.

Simplemente necesito leer X bytes de un fichero, editarlos en el buffer que los lei y volver a escribirlos en donde estaban.
Título: Re: Editar fichero win32
Publicado por: MAFUS en 30 Agosto 2018, 21:58 PM
En API Windows ni idea.
Pero la idea sería que volvieras atrás el puntero del archivo tantos bytes como leíste, grabas  tantos bytes como leíste y continuas con la siguiente escritura.

Un fseek si se usara la biblioteca estándar.
Título: Re: Editar fichero win32
Publicado por: MCKSys Argentina en 31 Agosto 2018, 17:41 PM
Hola!

Probaste usar SetFilePointer (https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfilepointer)?

Saludos!