crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> не могу открыть файл
FladeX
  опции профиля:
сообщение 25.3.2009, 12:09
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Делал по аналогии с примером..
    QDomDocument doc("help");
    QFile file("help.xml");
    if (!file.open(QIODevice::ReadOnly))
    //if (file.open(QIODevice::NotOpen))
    {
        QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 001. Невозможно открыть файл help.xml"));
        return;
    }
    if (!doc.setContent(&file))
    {
        QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 002. Невозможно прочитать файл help.xml"));
        file.close();
        return;
    }
    file.close();

Файл help.xml лежит в той же директории, что и исходники. Права доступа ставил и "чтение", и "чтение и запись". Причем первая ошибка появляется только при проверке на ReadOnly, а если проверять на NotOpen, то ошибки нету, хотя дальше пишет ошибку контента.

Инклюды:
#include <QtGui>
#include <QDomDocument>
#include <QIODevice>

И файл проекта:
QT += xml


Где ошибка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.3.2009, 13:05
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


проблема с открытием файла к XML ни какого отношения не имеет.

Цитата(FladeX @ 25.3.2009, 15:09) *
QFile file("help.xml");
эта запись на некоторых ОСьках не означает текущий каталог.
Попробуй так:
Цитата
QFile file("./help.xml");


я, обычно еще проверяю существует ли файл:
Цитата
if (!file.exists())



------------
Цитата(FladeX @ 25.3.2009, 15:09) *
Файл help.xml лежит в той же директории, что и исходники.
только сейчас подумалось, а бинарь там же где и исходники?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 25.3.2009, 13:15
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 25.3.2009, 13:05) *
Цитата(FladeX @ 25.3.2009, 15:09) *
Файл help.xml лежит в той же директории, что и исходники.
только сейчас подумалось, а бинарь там же где и исходники?

Все файлы проекта лежат в одной директории. И .xml там же.

file.exists() выдает false и для help.xml, и для ./help.xml.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 25.3.2009, 13:17
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ну тут уже проскочила идея - уточню: в том виде, что описан тут предполагает, что исполняемый файл и файл xml лежат в одном каталоге. Желательно прописывать полный путь к файлу (на всякий случай, даже если они лежат в одном каталоге). Проверять на существование (exists) тоже желательно!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 25.3.2009, 13:19
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Они и лежат в одном каталоге. А полный путь прописывать даже не знаю как - программа используется на разных компах с разными ОС, установщика нету, поэтому путь может быть абсолютно любым.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.3.2009, 13:20
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


FladeX, попробуй вывести содержимое каталога, может у тебя текущий каталог где-то изменен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 25.3.2009, 13:22
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Хм, прописал полный путь:
    QFile file("/home/opensuse/qt/expertsystem/help.xml");

и заработало. А почему же относительный путь не получается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 25.3.2009, 13:23
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(FladeX @ 25.3.2009, 13:19) *
Они и лежат в одном каталоге. А полный путь прописывать даже не знаю как - программа используется на разных компах с разными ОС, установщика нету, поэтому путь может быть абсолютно любым.

Попробуйте так:
QString name_file(QDir::currentPath() + QDir::separator() + QString("help.xml"));

Проверьте в дебаге, что в данной строке выводится корректный путь к файлу.

Сообщение отредактировал AD - 25.3.2009, 13:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 25.3.2009, 13:24
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 25.3.2009, 13:20) *
FladeX, попробуй вывести содержимое каталога, может у тебя текущий каталог где-то изменен

С этим вроде все в порядке:
opensuse:/home/opensuse/qt/expertsystem # qmake
opensuse:/home/opensuse/qt/expertsystem # make

opensuse:/home/opensuse/qt/expertsystem # ls
expertsystem       expertsystem.h   expertsystem.pro   expertsystem.qrc~  favicon.ico    help.xml   main.cpp   Makefile              qrc_expertsystem.cpp
expertsystem.cpp   expertsystem.h~  expertsystem.pro~  expertsystem.rc    function.txt   help.xml~  main.cpp~  moc_expertsystem.cpp  qrc_expertsystem.o
expertsystem.cpp~  expertsystem.o   expertsystem.qrc   expertsystem.rc~   function.txt~  images     main.o     moc_expertsystem.o
opensuse:/home/opensuse/qt/expertsystem #

Я компилю из баша, и путь берется относительный.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.3.2009, 13:25
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(FladeX @ 25.3.2009, 16:24) *
С этим вроде все в порядке:
я имел в виду: изменен в программе
тест:
QDir tstDir("./");
   qDebug() << "Path \"./\" is:" << tstDir.absolutePath();
   qDebug() << "Real current path is:" << QDir::current();
   qDebug() << "File list:" << tstDir.entryList(QDir::Files);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 6.10.2022, 6:24