尽管文件包含数据,QT仍未加载文件数据

时间:2013-12-09 17:50:17

标签: qt file

我尝试将CS​​V文件加载到'QString'(以便将来将其转换为html文件)

但是虽然文件存在且包含数据QT“认为”该文件是空的。

这是我的功能:

void readCSVfile(QString csvFileName, bool relativePath)
{
    QString csvFile = csvFileName;
    QString workingDir = QDir::currentPath() + "//";

    QString fullCSVpath = (relativePath ? workingDir : "") + csvFile;
    QFile csvfile(fullCSVpath);

    // verify csv file is exist
    if (!csvfile.exists())
    {
        csvfile.close();
        return;
    }

    QTextStream in(&csvfile);
    // test - to verify QT success to read the file.
    QString alltextTemp = in.readAll();
}

这是我的文件内容:

Time,Reporter,Type,Content,Screenshot,RTF Note
11/12/2013 5:37:25 PM,Asf,(Rapid Reporter version),"1.12.12.28",,
11/12/2013 5:37:25 PM,Asf,Session Reporter,"Asf",,
11/12/2013 5:37:25 PM,Asf,Session Charter,"target",,
11/12/2013 5:37:47 PM,Asf,Session End. Duration,"00:00:22",,

问题:'alltextTemp'变量包含空字符串(不包含文件内容)

问题:为什么? (或者我需要做些什么来获取内容)

该文件没有特殊权限等。

QT 5.1.1

OS:Win 7 x64

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

使用文件名初始化QFile对象是不够的。这并没有告诉Qt你正在尝试用这个文件做什么(你试图打开现有文件吗?创建一个新文件?删除一个现有文件?)。这也不允许Qt立即告诉你它无法打开文件,因为构造函数不能返回值,而且Qt不使用异常。

要实际打开文件进行阅读,您需要调用open成员函数:

QFile csvfile(fullCSVpath);

if ( !csvfile.open( QIODevice::ReadOnly ) )
{
    Log( tr("Could not read file %1: %2") .arg( csvfile ) .arg( csvfile.errorString() );
    return false;
}

QTextStream in(&csvfile);

请注意,打印描述性错误消息是一种很好的编程习惯,因此应用程序的用户知道:

  • 试图打开哪个文件
  • 您尝试对文件做了什么(读?写?创建?)
  • 为什么文件无法打开。