我尝试将CSV文件加载到'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
感谢您的帮助!
答案 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);
请注意,打印描述性错误消息是一种很好的编程习惯,因此应用程序的用户知道: