Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
ktulhu-forever
70 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 28
#1

Не читает текст из файла - C++ Qt

14.12.2013, 16:48. Просмотров 1444. Ответов 10
Метки нет (Все метки)

Имеется такой код (Qt 5.2)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ActorProxyModel::ActorProxyModel(QObject *parent) :
    QSortFilterProxyModel(parent)
{
 
    QFile file("actor.ini");
    if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        QMessageBox msgBox;
        msgBox.setText(tr("Cannot to open actor.ini"));
        msgBox.exec();
    }
    QRegularExpression reg("{(.*)}[ \t]*{(.*)}");
    QTextStream stream(&file);
 
    qDebug() << stream.readAll();
    while (!stream.atEnd()) {
        QStringList list;
        list << reg.match(stream.readLine().trimmed()).captured(1) << reg.match(stream.readLine().trimmed()).captured(2);
        filter.push_back(list);
    }
    file.close();
}
Необходимо из внешнего файла прочитать информацию, чтобы на его основе отфильтровать данные в модели.
Но файл открывается, почему-то совсем не считывается, и
C++ (Qt)
1
qDebug() << stream.readAll();
выводит на экран пустую строку. Поясните, что я делаю не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 16:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не читает текст из файла (C++ Qt):

Что быстрей читает текст и бинарные данные QFile или std::istream?
Что быстрей читает текст и бинарные данные QFile или std::istream? есть у кого...

Клиент читает из файла несколько пар чисел, отправляет их на сервер в двоичном виде, получает произведение
Клиент читает из файла несколько пар чисел, отправляет их на сервер в двоичном...

QFile | Читает, но не читает или "Что я делаю не так?"
Собственно, такая проблема: читаю bmp файл. Сначала решил проверить файл на...

C#. Не читает кириллический текст из текстового файла.
TextReader tr = new StreamReader('settings.dat'); using (StreamReader sr = new...

Проблема с OCR Puma.Net (читает текст с одной картинки, но не читает с другой)
Здравствуйте, есть проект с оцр Puma.Net и есть 2 картинки 1ая и 2ая, только...

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

10
Humanoid
Почетный модератор
9922 / 3825 / 341
Регистрация: 12.06.2008
Сообщений: 11,322
14.12.2013, 20:09 #2
В документации есть фраза
Note: In WriteOnly or ReadWrite mode, if the relevant file does not already exist, this function will try to create a new file before opening it.
Т.е. ReadWrite указывает, что файл может не существовать и он просто создаст в этом случае новый. Попробуй указать абсолютный путь до файла, что бы быть уверенным, что он существует. Или перед open() проверь
C++ (Qt)
1
2
3
if (!file.exists()) {
  // файл не существует
}
Добавлено через 59 секунд
Или QIODevice::ReadWrite замени на QIODevice::ReadOnly... но это только в том случае, если в файл ничего записывать не понадобится.
0
ktulhu-forever
70 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 28
14.12.2013, 21:08  [ТС] #3
Спасибо, но оказалось, надо было прописать абсолютный путь к файлу, тогда всё заработало.
0
Humanoid
Почетный модератор
9922 / 3825 / 341
Регистрация: 12.06.2008
Сообщений: 11,322
14.12.2013, 22:33 #4
Проблема в том, что если исходники находятся в директории C:\Qt\projects\myproject, то при запуске скомпилированной программы из QtDesigner она считает, что текущая директория что-то вроде C:\Qt\projects\build-myproject-Desktop_Qt_5_1_1_MinGW_32bit-Debug\ ... в общем, на один уровень выше, чем тот, где exe'шник собирается. Поэтому он файл и искал именно в той директории, а не среди исходников.
1
MolodoyCoder
35 / 13 / 2
Регистрация: 02.09.2013
Сообщений: 565
16.12.2013, 11:40 #5
ktulhu-forever,
Вам правильно сказалHumanoid, если в программе не задан путь к файлу, который читаем,
надо положить его в \build....-Release\ или \build...-Debug\

А вообще я читаю текстовый файл в список строк вот так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
//myclass.h
 QStringList StringsFromFile;
 
//чтение файла в список строк
int MyClass::ReadStringsFromFile(QString f)
{
    StringsFromFile.clear();
    QFile file(f);
    if (!file.open(QIODevice::ReadOnly)) return 0;
    while (!file.atEnd()) StringsFromFile.append(file.readLine());
    file.close();
   return 0;
}
0
RazrFalcon
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
16.12.2013, 12:12 #6
Ну если уж советовать код, то лучше будет:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
//чтение файла в список строк
bool MyClass::ReadStringsFromFile(const QString &f)
{
    StringsFromFile.clear();
    QFile file(f);
    if (!file.open(QFile::ReadOnly | QFile::Text))
        return false;
    QTextStream textStream(&file);
    while (!file.atEnd())
        StringsFromFile.append(textStream.readLine());
    return true;
}
file.close(); - не нужен. При создании QFile в области видимости функции, он сам закроется при удалении.
0
MolodoyCoder
35 / 13 / 2
Регистрация: 02.09.2013
Сообщений: 565
16.12.2013, 12:15 #7
Цитата Сообщение от RazrFalcon Посмотреть сообщение
он сам закроется при удалении.
Объекта ?
А я не удаляю объект на протяжении всего времени работы программы.В этом же объекте храню загруженные, и обработанные строки.
Там этот метод вызывается неоднократно. К разным файлам.
0
RazrFalcon
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
16.12.2013, 12:32 #8
QFile вы создаете внутри метода, и вот он при завершении удалиться. Закрывать его не нужно.
0
MolodoyCoder
35 / 13 / 2
Регистрация: 02.09.2013
Сообщений: 565
16.12.2013, 17:30 #9
Цитата Сообщение от RazrFalcon Посмотреть сообщение
QFile вы создаете внутри метода, и вот он при завершении удалиться. Закрывать его не нужно.
Я это понял так:
Я описал создание объекта, от класса QFile,внутри метода другого класса. Поэтому файл закроется:
1.При закрытии программы
2.Или, если я работаю динамически с new - delete,файл закроется после удаления объекта.
Правильно ?
0
RazrFalcon
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
17.12.2013, 01:10 #10
1) Файл закроется, в данном случает, при завершении функции ReadStringsFromFile.
2) Да.
1
MolodoyCoder
35 / 13 / 2
Регистрация: 02.09.2013
Сообщений: 565
17.12.2013, 06:01 #11
Цитата Сообщение от RazrFalcon Посмотреть сообщение
QFile вы создаете внутри метода, и вот он при завершении удалиться. Закрывать его не нужно.
Цитата Сообщение от RazrFalcon Посмотреть сообщение
1) Файл закроется, в данном случает, при завершении функции ReadStringsFromFile.
2) Да.
Ок.Спасибо!
0
17.12.2013, 06:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 06:01
Привет! Вот еще темы с решениями:

File_get_contents читает данные не из файла, а из кеша файла
Добрый день. С помощью формы, в файл banerok.txt, записываю...

Составить программу, которая читает произвольный текст
var f:text; s:string; x:set of char; i:byte; c:char; begin x := ;...

Составить программу, которая читает произвольный текст
Составить программу, которая читает произвольный текст (5 строк по 40 символов)...

Составить программу, читает произвольный текст (5 строк по 10 символов)
Составить программу, читает произвольный текст (5 строк по 10 символов) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru