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
El resultado que obtienes es igual al que esperas?
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.
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.
Hola!
Probaste usar SetFilePointer (https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfilepointer)?
Saludos!