Creando / escribiendo en un nuevo archivo en Qt

Estoy tratando de escribir en un archivo y si el archivo no existe, créelo. He buscado en internet y nada me funcionó.

Mi código se ve actualmente así:

QString filename="Data.txt"; QFile file( filename ); if ( file.open(QIODevice::ReadWrite) ) { QTextStream stream( &file ); stream << "something" << endl; } 

Si creo un archivo de texto llamado Datos en el directorio, permanece vacío. Si no creo nada tampoco creará el archivo. No sé qué hacer con esto, esta no es la primera forma en que intenté crear / escribir en un archivo y ninguna de las formas funcionó.

Gracias por tus respuestas.

¿Estás seguro de que estás en el directorio correcto?
Abrir un archivo sin una ruta completa lo abrirá en el directorio de trabajo actual. En la mayoría de los casos esto no es lo que quieres. Intenta cambiar la primera línea a

QString filename="c:\\Data.txt" o
QString filename="c:/Data.txt"

y ver si el archivo se crea en c:\

Eso es raro, todo se ve bien, ¿estás seguro de que no funciona para ti? Porque este main seguramente funciona para mí, así que buscaría la fuente de su problema en otro lugar.

 #include  #include  int main() { QString filename = "Data.txt"; QFile file(filename); if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); stream << "something" << endl; } } 

El código que proporcionó también es casi el mismo que el que se proporciona en la descripción detallada de QTextStream, así que estoy bastante seguro de que el problema está en otra parte 🙂

También tenga en cuenta que el archivo no se llama Data sino Data.txt y se debe crear / ubicar en el directorio desde el que se ejecutó el progtwig (no necesariamente en el que se encuentra el ejecutable).

 #include  #include  #include  int main(int argc, char *argv[]) { // Create a new file QFile file("out.txt"); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&file); out << "This file is generated by Qt\n"; // optional, as QFile destructor will already do it: file.close(); //this would normally start the event loop, but is not needed for this //minimal example: //return app.exec(); return 0; } 

Su código está perfectamente bien, simplemente no está buscando la ubicación correcta para encontrar su archivo. Dado que no ha proporcionado la ruta absoluta, su archivo se creará en relación con la carpeta de trabajo actual (más precisamente en la carpeta de trabajo actual en su caso).

Su carpeta de trabajo actual es establecida por Qt Creator. Vaya a Proyectos >> Su comstackción seleccionada >> Presione el botón ‘Ejecutar’ (al lado de ‘Construir) y verá qué hay en esta página que, por supuesto, también puede cambiar.

introduzca la descripción de la imagen aquí

 QFile file("test.txt"); /* * If file not exit it will create * */ if (!file.open(QIODevice::ReadOnly | QIODevice::Text | QIODevice::ReadWrite)) { qDebug() << "FAIL TO CREATE FILE / FILE NOT EXIT***"; } /*for Reading line by line from text file*/ while (!file.atEnd()) { QByteArray line = file.readLine(); qDebug() << "read output - " << line; } /*for writing line by line to text file */ if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); stream << "1_XYZ"< 

Puede suceder que la causa no sea que no encuentre el directorio correcto. Por ejemplo, puede leer el archivo (incluso sin la ruta absoluta) pero parece que no puede escribir en él.

En ese caso, podría ser que programe salidas antes de que se pueda finalizar la escritura.

Si su progtwig utiliza un bucle de eventos (como con una aplicación GUI, por ejemplo, QMainWindow ) no es un problema. Sin embargo, si su progtwig sale inmediatamente después de escribir en el archivo, debe vaciar la secuencia de texto, cerrar el archivo no siempre es suficiente (y es innecesario, ya que está cerrado en el destructor).

 stream << "something" << endl; stream.flush(); 

Esto garantiza que los cambios se confirmen en el archivo antes de que el progtwig continúe a partir de esta instrucción.

El problema parece ser que el QFile se destruye antes que QTextStream. Entonces, incluso si la secuencia se vacía en su constructor, es demasiado tarde, ya que el archivo ya está cerrado.