【问题标题】:QT File writing with arrays使用数组写入 QT 文件
【发布时间】:2014-12-09 14:58:55
【问题描述】:

我正在尝试从 csv 文件读取到另一个文件。没有任何错误,我只是不明白为什么它没有写入文件。任何帮助表示赞赏。我对 QT 很陌生。

QString arr[581][6];
while (!file.atEnd()) {
    QByteArray line = file.readLine();

    for (int i=0; i<581; i++){
        for(int j=0; j<6; j++){

            arr[i][j]=line;

        }
    }
}

QString Hfilename="c:\Data.txt";
QFile fileH( Hfilename );
if ( fileH.open(QIODevice::ReadWrite) )
{
    QTextStream stream( &fileH );

    for (int i=0; i<581; i++){
        for(int j=0; j<6; j++){

            stream<<arr[i][j]<<endl;

        }
    }

}

【问题讨论】:

  • 将字符串文字中的反斜杠加倍:"c:\\Data.txt"。此外,非管理员用户可能没有足够的权限在驱动器的根目录中创建文件; open 调用可能失败。另外,您确定数组中至少有一个非空字符串吗?检查一下。
  • @IgorTandetnik 驱动器根目录的默认 Windows ACL 授予“所有人”完全控制权(Program Files 和 Windows 等重要子目录显然受到更多限制),因此任何人都应该能够在那里创建文件。任何给定的系统都可以进行不同的重新配置,但这是默认设置。
  • @AndrewMedico 当我运行记事本并尝试将文件保存到C:\ 时,会弹出一条消息说C:\a.txt You don’t have permission to save in this location. Contact the administrator to obtain permission. 我99.9% 确定我的系统上的权限是默认设置。跨度>
  • 我的错误。所有经过身份验证的用户都可以在根目录中创建新文件夹,但不能创建新文件。

标签: c++ qt file csv qt5


【解决方案1】:

根据您提供的代码,请为写入步骤找到一个工作示例(您指定读取步骤一直在工作):

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

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString arr[3];
    arr[0] = "xxxxxx";
    arr[1] = "yyyy";
    arr[2] = "zzzz";

    QString Hfilename="/home/jhondoe/toto.txt";
    QFile fileH( Hfilename );
    if ( fileH.open(QIODevice::ReadWrite) )
    {
        QTextStream stream( &fileH );
        for (int i=0; i<3; i++){
            stream << arr[i] << endl;
        }
    }
    return a.exec();
}

发生了什么变化:

  • 我(我的用户帐户)有足够的权限写入输出文件
  • 如果您在 Windows 上工作,正如@igor-tandetnik 所说,您必须使用双反斜杠作为分隔符。您还可以使用 QDir::separator() 作为文件路径的本地分隔符。

【讨论】:

  • 我假设因为我没有收到错误,我从文件中正确读取,但我的文件是空的。你知道如何从这个文件中读取。我上面提供的代码中缺少他们的东西吗?
  • 为什么不简单地使用 qDebug 或 std::cout 在循环中打印“line”变量的内容?这样做,您将能够确认或确认您的文件读取代码有效。
猜你喜欢
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多