2011-02-06 119 views
40

我正在尝试写入文件,如果文件不存在,请创建它。我在网上搜索,没有为我工作。在Qt中创建/写入新文件

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

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

如果我在目录中创建名为Data的文本文件,它仍然是空的。如果我不创建任何东西,它也不会创建文件。 我不知道该怎么做,这不是我尝试创建/写入文件的第一种方式,也没有任何方法可行。

感谢您的回答。

回答

21

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

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

,看看是否在c:\

+0

我确实在错误的目录中。 c:\ Data.txt没有在c:\中创建它,但是...它位于与cpp文件不同的文件夹中。它在一个包含.exe – Tom83B 2011-02-06 22:07:35

+3

@ Tom83B文件夹的文件夹中。这是预期的行为。 .exe是创建文本文件的,而不是.cpp文件。此外,您应该尝试“C:\ Data.txt”,驱动器号可能区分大小写。 – 2011-02-06 23:37:42

20

这是奇怪文件被创建,一切都看起来不错,你确定它不为你工作?因为这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提供的,所以我敢肯定的一个,这个问题是在其他地方:)

还要注意,该文件不叫DataData.txt,应该创建/位于运行程序的目录中(不一定是可执行程序所在的目录)。

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

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

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

enter image description here

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

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

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

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

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

这保证了程序从该指令继续之前更改提交到文件中。

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