2013-12-09 2 views
1

попытки загрузить CSV-файл в «QString» (для того, чтобы преобразовать его в HTML-файл в будущем)QT не загружать данные файла, хотя файл содержит данные

Но хотя файл существует и содержит данные 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

ОС: Win 7 x64

Благодарим Вас за любая помощь!

+0

Используйте оператор _qDebug_ для печати _fullCSVpath_ и посмотрите, есть ли путь к файлу, который вы хотите, и небольшой сбой, который я вижу, но я не уверен, что это может вызвать проблему у вас: "//" - слэша не нужно экранировать, одной косой черты достаточно (только символ обратной косой черты должен быть экранирован) – Zlatomir

+0

Помните, что папка по умолчанию может не быть папкой, содержащей исполняемый файл. С Visual Studio папка по умолчанию при отладке - это файл, содержащий файл решения. – drescherjm

+0

Также я надеюсь, что вы установите alltextTemp где-то еще, так как он выйдет за пределы области в следующем} – drescherjm

ответ

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); 

Обратите внимание, что это хорошая практика программирования для печати описательных сообщений об ошибках, так что пользователь приложения знает:

  • Какой файл была сделана попытка быть открытым
  • Что вы пытались сделать с файлом (читать? писать? создать?)
  • Почему файл не открывается.
+0

Большое спасибо! – AsfK

Смежные вопросы