我正在尝试写入文件,如果文件不存在则创建它。我在网上搜索过,没有什么对我有用。
我的代码目前看起来像这样:
QString filename="Data.txt";
QFile file( filename );
if ( file.open(QIODevice::ReadWrite) )
{
QTextStream stream( &file );
stream << "something" << endl;
}
如果我在目录中创建一个名为Data的文本文件,它将保持为空。如果我不创建任何东西,它也不会创建文件。 我不知道该如何处理,这不是我尝试创建/写入文件的第一种方式,而且没有一种方法可行。
感谢您的回答。
答案 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;按“运行”按钮(“构建”旁边),您将看到此页面上的内容,当然您也可以更改。
答案 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;
}