Editar fichero win32

Iniciado por XKC, 30 Agosto 2018, 20:44 PM

0 Miembros y 1 Visitante están viendo este tema.

XKC

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
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

ivancea96

El resultado que obtienes es igual al que esperas?

XKC

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.
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

MAFUS

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.

MCKSys Argentina

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."