2013-10-25 5 views
0

Я попытался использовать QTextStream для чтения данных из XML-файла, но, наконец, я получил пустую строку. Вот мой код:не удалось прочитать XML-файл формы данных с помощью QTextStream

QFile f("note.xml"); 
if(f.open(QIODevice::ReadWrite)){ 
    QTextStream in(&f); 
    in.setCodec("UTF-8"); 
    qDebug()<<in.readAll(); 
}else qDebug()<<"failed"; 

Вот содержание XML-файла:

<?xml version="1.0" encoding="UTF-8" ?> 
<note> 
<to>George</to> 
</note> 

Я использую QT_VERSION 5.1.1 и MinGW_32bit-Debug, Windows 7.if меняю XML файл в формате TXT файла, результат все равно пустой.

+0

Выполняется ли 'QFile :: open' return true? Возвращает ли 'f.readAll()' данные? – hank

+0

'QFile :: open' reutrn true и данные не возвращаются' f.readAll() ' – camperr

+1

Убедитесь, что файл, который вы открываете, существует. Попробуйте открыть его с помощью флага 'QIODevice :: ReadOnly', потому что флаг' QIODevice :: ReadWrite' автоматически создает пустой файл, если указанный файл не существует. – hank

ответ

3

Я думаю, что ваша проблема может быть связана с тем, что вы не передаете полный путь к конструктору QFile. Если файл не находится в текущем пути, вызов QFile :: open может быть успешным (возможно, потому, что вы открываете в режиме чтения и записи), создавая новый файл, и, таким образом, чтение возвращает пустую строку. Чтобы этого избежать, вы можете проверить, существует ли файл. Попробуйте изменить код примерно на следующее:

QFile f("/complete-path/note.xml"); 
if(f.exists() && f.open(QIODevice::ReadWrite) { 
    . . . 

EDIT: Как Хэнк только что предложил в комментарии. :)

+1

ReadOnly лучше, здесь у вас есть потенциальная гонка, если файл удален между exists() и open(). –

+0

Спасибо. Я получаю правильный результат, используя полный путь к файлу. Но мои файлы кода и xml-файл находятся в одном каталоге, поэтому я не могу просто использовать имя файла. – camperr

+0

@camperr Ваш файл должен быть в том же каталоге, что и ваш исполняемый файл. – hank