Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

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

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

14.12.2013, 16:48. Просмотров 1354. Ответов 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? - C++ Qt
Что быстрей читает текст и бинарные данные QFile или std::istream? есть у кого опыт в тестировании?

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

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

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

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

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

10
Humanoid
Почетный модератор
9877 / 3778 / 175
Регистрация: 12.06.2008
Сообщений: 11,200
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
Почетный модератор
9877 / 3778 / 175
Регистрация: 12.06.2008
Сообщений: 11,200
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 / 3
Регистрация: 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
1382 / 1239 / 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 / 3
Регистрация: 02.09.2013
Сообщений: 565
16.12.2013, 12:15 #7
Цитата Сообщение от RazrFalcon Посмотреть сообщение
он сам закроется при удалении.
Объекта ?
А я не удаляю объект на протяжении всего времени работы программы.В этом же объекте храню загруженные, и обработанные строки.
Там этот метод вызывается неоднократно. К разным файлам.
0
RazrFalcon
1382 / 1239 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
16.12.2013, 12:32 #8
QFile вы создаете внутри метода, и вот он при завершении удалиться. Закрывать его не нужно.
0
MolodoyCoder
35 / 13 / 3
Регистрация: 02.09.2013
Сообщений: 565
16.12.2013, 17:30 #9
Цитата Сообщение от RazrFalcon Посмотреть сообщение
QFile вы создаете внутри метода, и вот он при завершении удалиться. Закрывать его не нужно.
Я это понял так:
Я описал создание объекта, от класса QFile,внутри метода другого класса. Поэтому файл закроется:
1.При закрытии программы
2.Или, если я работаю динамически с new - delete,файл закроется после удаления объекта.
Правильно ?
0
RazrFalcon
1382 / 1239 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
17.12.2013, 01:10 #10
1) Файл закроется, в данном случает, при завершении функции ReadStringsFromFile.
2) Да.
1
MolodoyCoder
35 / 13 / 3
Регистрация: 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 читает данные не из файла, а из кеша файла - PHP
Добрый день. С помощью формы, в файл banerok.txt, записываю последовательность чисел ( через запятую). Это номера закупок. Вот...

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

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

Составить программу, читает произвольный текст (5 строк по 10 символов) - Pascal ABC
Составить программу, читает произвольный текст (5 строк по 10 символов) и распечатывает по алфавиту все латинские буквы, входящие в этот...


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

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

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