在Qt中创建/写入新文件

时间:2011-02-06 21:17:54

标签: c++ qt

我正在尝试写入文件,如果文件不存在则创建它。我在网上搜索过,没有什么对我有用。

我的代码目前看起来像这样:

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

如果我在目录中创建一个名为Data的文本文件,它将保持为空。如果我不创建任何东西,它也不会创建文件。 我不知道该如何处理,这不是我尝试创建/写入文件的第一种方式,而且没有一种方法可行。

感谢您的回答。

6 个答案:

答案 0 :(得分:22)

您确定自己位于正确的目录中吗? 打开没有完整路径的文件将在当前工作目录中打开它。在大多数情况下,这不是你想要的。尝试将第一行更改为

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

并查看该文件是否在c:\

中创建

答案 1 :(得分:22)

这很奇怪,一切看起来都很好,你确定它不适合你吗?因为这个main肯定对我有用,所以我会在其他地方找你的问题来源。

#include <QFile>
#include <QTextStream>


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

您提供的代码也与detailed description of QTextStream中提供的代码几乎相同,所以我很确定,问题出在其他地方:)

另请注意,该文件不是Data而是Data.txt,应该在运行程序的目录中创建/定位(不一定是可执行文件所在的目录)。

答案 2 :(得分:8)

#include <QFile>
#include <QCoreApplication>
#include <QTextStream>

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;
}

答案 3 :(得分:3)

您的代码非常好,您只是没有找到合适的位置来查找您的文件。由于您尚未提供绝对路径,因此将相对于当前工作文件夹创建文件(更准确地说,在您的案例中是当前工作文件夹中)。

您当前的工作文件夹由Qt Creator设置。转到项目&gt;&gt;您选择的版本&gt;&gt;按“运行”按钮(“构建”旁边),您将看到此页面上的内容,当然您也可以更改。

enter image description here

答案 4 :(得分:1)

可能会发生原因并不是您找不到正确的目录。例如,你可以从文件中读取(即使没有绝对路径),但似乎你无法写入它。

在这种情况下,可能是在完成写作之前编程退出。

如果您的程序使用事件循环(例如使用GUI应用程序,例如QMainWindow),那么这不是问题。但是,如果您的程序在写入文件后立即退出,则应该刷新文本流,关闭文件并不总是足够(并且它是不必要的,因为它在析构函数中关闭)。

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

这可以保证在程序继续执行此指令之前将更改提交到文件。

问题似乎是QFile在QTextStream之前被破坏了。因此,即使在QTextStream析构函数中刷新了流,也为时已晚,因为文件已经关闭。

答案 5 :(得分:0)

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"<<endl;
    stream << "2_XYZ"<<endl;
}