Russian Qt Forum
Апрель 29, 2024, 01:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Чтение с файла  (Прочитано 8274 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Ноябрь 25, 2016, 15:18 »

Не могу считать с файла  Непонимающий
Не понимаю в чем может быть причина, файл находит и открывает, но в консоль не выводит данные,
хотя в файле все есть.
Код
C++ (Qt)
bool MainWindow::parserFile(QString path)
{
   qDebug()<<"path = "<<path;
   QFile pFile(path);
   QString line;
   buffer = new QStringList;
   buffer->clear();
   if(pFile.exists()){
       if(!pFile.open(QIODevice::ReadWrite)){
           qCritical()<<"file not open";
           delete buffer;
           return false;
       }
       QByteArray ba = pFile.readAll();
       qDebug()<<"ba = "<<ba;
       QString str;
       str.append(ba);
       qDebug()<<str;
       QStringList strList= str.split("\n");
       qDebug()<<"strList = "<<strList.count();
       for(int i = 0; i < strList.count(); i++){
           QString s = strList.at(i);
           qDebug()<<"s = "<<s;
       }
       pFile.close();
       return true;
   }
   qCritical()<<"file not exists load file";
   delete buffer;
   return false;
}
 

Такое впечатление, что
Код:
 QByteArray ba = pFile.readAll();
не работает. Не понимаю Непонимающий
« Последнее редактирование: Ноябрь 25, 2016, 15:21 от demaker » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 25, 2016, 16:12 »

Такое впечатление, что
Код:
 QByteArray ba = pFile.readAll();

Цитировать
This function has no way of reporting errors; returning an empty QByteArray can mean either that no data was currently available for reading, or that an error occurred.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #2 : Ноябрь 25, 2016, 16:56 »

Такое впечатление, что
Код:
 QByteArray ba = pFile.readAll();

Цитировать
This function has no way of reporting errors; returning an empty QByteArray can mean either that no data was currently available for reading, or that an error occurred.


Но в файле есть данные.
Или я Вас не правильно понял?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #3 : Ноябрь 25, 2016, 17:24 »

Попробуйте ReadOnly. WriteOnly делает Truncate файлу.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Ноябрь 25, 2016, 18:11 »

А что показывает такой код

Код:
qDebug()<<"ba.size() = "<<ba.size();
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Ноябрь 25, 2016, 19:14 »

У меня readAll когда-то давно плохо работал при считывании больших файлов.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #6 : Ноябрь 26, 2016, 10:21 »

Спасибо,  за советы. В понедельник отпишусь о результатах.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #7 : Ноябрь 28, 2016, 14:49 »

А что показывает такой код
Код:
qDebug()<<"ba.size() = "<<ba.size();

Код:
ba.size = 29114
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #8 : Ноябрь 28, 2016, 14:50 »

Попробуйте ReadOnly. WriteOnly делает Truncate файлу.
Не помогло
Что делать??? Непонимающий Непонимающий Непонимающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #9 : Ноябрь 28, 2016, 14:55 »

Не помогло
Что делать??? Непонимающий Непонимающий Непонимающий
Так а qDebug()<<str  вашем коде что показывает?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Ноябрь 28, 2016, 14:57 »

А что показывает такой код
Код:
qDebug()<<"ba.size() = "<<ba.size();

Код:
ba.size = 29114

Так там наверняка какая-нибудь бинарщина, вывод которой на консоль останавливается после первого же нуля.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #11 : Ноябрь 28, 2016, 15:02 »

Так там наверняка какая-нибудь бинарщина, вывод которой на консоль останавливается после первого же нуля.
Т.е. вы бинарные данные присвоили строке и пытаетесь их сплитом разделить?  Строит глазки
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #12 : Ноябрь 28, 2016, 15:08 »

Так там наверняка какая-нибудь бинарщина, вывод которой на консоль останавливается после первого же нуля.
Т.е. вы бинарные данные присвоили строке и пытаетесь их сплитом разделить?  Строит глазки

А как же мне сделать тогда правильно.
Подскажите пожалуйста Строит глазки
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #13 : Ноябрь 28, 2016, 15:18 »

А как же мне сделать тогда правильно.
Подскажите пожалуйста Строит глазки
Делить на строки имеет смысл только текстовые данные, поэтому файл желательно иметь текстовый. Улыбающийся

После прочтения данных в QByteArray их нужно правильно сконвертировать в QString в зависимости от кодировки исходного файла:
Код
C++ (Qt)
// Если текстовый файл в UTF-8
QTextCodec *codec = QTextCodec::codecForName( "UTF-8" );
QString str = codec->toUnicode( ba );
 
QStringList strList= str.split("\n");
qDebug()<<"strList = "<<strList.size();
 
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #14 : Ноябрь 28, 2016, 15:31 »

А как же мне сделать тогда правильно.
Подскажите пожалуйста Строит глазки
Делить на строки имеет смысл только текстовые данные, поэтому файл желательно иметь текстовый. Улыбающийся

После прочтения данных в QByteArray их нужно правильно сконвертировать в QString в зависимости от кодировки исходного файла:
Код
C++ (Qt)
// Если текстовый файл в UTF-8
QTextCodec *codec = QTextCodec::codecForName( "UTF-8" );
QString str = codec->toUnicode( ba );
 
QStringList strList= str.split("\n");
qDebug()<<"strList = "<<strList.size();
 
Сделал как Вы сказали
Код
C++ (Qt)
bool MainWindow::parserFile(QString path)
{
   qDebug()<<"path = "<<path;
   QFile pFile(path);
   QString line;
   buffer = new QStringList;
   buffer->clear();
   if(pFile.exists()){
       if(!pFile.open(QIODevice::ReadOnly)){
           qCritical()<<"file not open";
           delete buffer;
           return false;
       }
       QByteArray ba = pFile.readAll();
       qDebug()<<"ba.size() = "<<ba.size();
       QTextCodec *codec = QTextCodec::codecForName("UTF-8");
       QString str = codec->toUnicode(ba);
       //str.append(ba);
       qDebug()<<str;
       QStringList strList= str.split("\n");
       qDebug()<<"strList = "<<strList.count();
       for(int i = 0; i < strList.count(); i++){
           QString s = strList.at(i);
           qDebug()<<"s = "<<s;
       }
       pFile.close();
       return true;
   }
   qCritical()<<"file not exists load file";
   delete buffer;
   return false;
}
 

Только в консоль выводит кучу строк
Код:
s = "
это нормально Непонимающий
Я думал хоть строки увижу. А файл сам текстовый.
« Последнее редактирование: Ноябрь 28, 2016, 15:33 от demaker » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 22.