txt texto sirve que por para manejo linea libreria leer lectura example escritura ejemplos definicion archivos archivo c++

texto - C++ ¿Puedo reutilizar fstream para abrir y escribir varios archivos?



manejo de archivos en c++ pdf (3)

Tengo 10 archivos que necesitan estar abiertos para escribir en secuencia. ¿Puedo tener un fstream para hacer esto? ¿Debo hacer algo especial (excepto flush ()) entre cada archivo o simplemente open(file1, fstream::out | std::ofstream::app) para cada archivo y cerrar la secuencia al final de todos Se escriben 10 archivos.


Cerrar una secuencia implica flush (), por lo que siempre que close() cada secuencia antes de abrir la siguiente, debería estar bien.


Deberá cerrarlo primero, porque la llamada open en una transmisión ya abierta falla. (Lo que significa que el indicador de failbit se establece en true). Tenga en cuenta los flujos de close() , por lo que no debe preocuparse por eso:

std::ofstream file("1"); // ... file.close(); file.clear(); // clear flags file.open("2"); // ... // and so on

También tenga en cuenta que no es necesario que la close() la última vez; el destructor hace eso por ti (y por lo tanto también los de flush() ). Esto puede hacer una buena función de utilidad:

template <typename Stream> void reopen(Stream& pStream, const char * pFile, std::ios_base::openmode pMode = ios_base::out) { pStream.close(); pStream.clear(); pStream.open(pFile, pMode); }

Y usted obtiene:

std::ofstream file("1"); // ... reopen(file, "2") // ... // and so on


Sí, pero debe cerrar el fstream cada vez antes de abrir el siguiente archivo con él.

Sin embargo, es mejor usar un nuevo objeto fstream con alcance para cada acceso a archivos para aprovechar los comportamientos del constructor y del destructor:

struct { const char *filename; void (*operation)(fstream&); } filelist[] = { { "file1", callback1 }, { "file2", callback2 }, ... { "file10", callback10 }, }; for (int i = 0; i < 10; ++i) { fstream f(filelist[i].filename); filelist[i].operation(f); }

En el ejemplo de código anterior, el flujo se vacía y se cierra cada vez a través del bucle for porque se llama al destructor cuando el objeto pierde alcance. El fstream se pasa por referencia a una función de devolución de llamada para que las operaciones puedan manejarse por archivo sin una instrucción de cambio desagradable. Si la operación es la misma para cada archivo, entonces esa construcción puede ser eliminada.