Hola buenas,
estoy trabajando con la API de windows.
Bien, la cuestion es que quiero editar un fichero.
Lo abro con CreateFileW asi:
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.
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
Resultado que obtengo:
Resultado que espero:
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
estoy trabajando con la API de windows.
Bien, la cuestion es que quiero editar un fichero.
Lo abro con CreateFileW asi:
Código [Seleccionar]
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.
Código [Seleccionar]
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
Código [Seleccionar]
HOLA MUNDO
HOLA MUNDO
Resultado que obtengo:
Código [Seleccionar]
HOLA MUNDO XXXXXXXXXXXXXXXXXX
HOLA MUNDO XXXXXXXXXXXXXXXXXX
Resultado que espero:
Código [Seleccionar]
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
