No has pensado en hacer algo como esto?:
Lo veo un poco menos confuso no?
Código
uint64_t getFileSize(istream& stream) { uint64_t cur, ret; cur = stream.tellg(); stream.seekg(0, ios::end); ret = stream.tellg(); stream.seekg(cur, ios::beg); return ret; } ifstream readfile(readpath.c_str(), ios::binary|ios::in); uint64_t fileSize = getFileSize(readfile); char *buf = new char[fileSize]; readfile.read(buf, fileSize); for(size_t i=0; i<fileSize; i++) { /* Haces lo que quieras con buf[i] */ outputfile.put(buf[i]); } delete[] buf;
Lo veo un poco menos confuso no?
Lo que me interesaba era realizarlo char a char, pero este código escribe entero de un plumazo por lo que no me serviría Pero muchas gracias!!
Pues es raro que no te funcione mi código porque a mi si me funciona, puede que el error esté en otro sitio.
Mi código completo es este:
Tenías razón sobre lo del read y write, si que desplazan.
Otra manera que me funciona es esta:
Mi código completo es este:
Código
#include<iostream> #include<fstream> using namespace std; int main(){ ofstream outputfile; outputfile.open("file1",ios::out); ifstream readfile; readfile.open("file2",ios::in); while(readfile.good()){ char writebuffer=readfile.get(); if(readfile.good())outputfile.put(writebuffer); } readfile.close(); outputfile.close(); }
Tenías razón sobre lo del read y write, si que desplazan.
Otra manera que me funciona es esta:
Código
#include<iostream> #include<fstream> using namespace std; int main(){ ofstream outputfile; outputfile.open("file1",ios::out); ifstream readfile; readfile.open("file2",ios::in); char writebuffer; while(readfile.read(&writebuffer,1)){ if(readfile.good())outputfile.write(&writebuffer,1); } readfile.close(); outputfile.close(); }
Al final resultaba que ¡¡LOS DOS CÓDIGOS FUNCIONABAN!! El problema era muy simple: Paraba la ejecución yo manualmente antes del ifstream.close() En serio, menuda chorrada y era simplemente eso. Muchas gracias a todos!!
Lo que aún no entiendo es por qué necesito cerrar el ifstream, osea, hago escritura en binario, una vez acabe de escribir el fichero se supone que no tiene ninguna cabecera de cierre ni nada por el estilo no? Es decir, al haber escrito todos los caracteres del fichero, aunque no cierre el stream, debería ser el mismo fichero. ¿Sabéis por que es? Porque el problema era ese, pensaba que aunque no cerrara el stream el fichero se había escrito ya completamente
Por fín lo arreglé!!