Название: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 21:53 Доброго времени суток
Просьба камнями не кидать. Подскажите пожалуйста, почему длинна array равна 0 Пытаюсь считать файл побайтно. В каждом байте по одному символу неизвестной кодировки. Структура файла - последовательность байтов. Считать бы хоть что-то.... Код: QString dbg; Название: Re: Побайтовое чтение файла Отправлено: Bepec от Сентябрь 25, 2013, 21:59 А давайте посмотрим на код и... По коду выходит, если вы открываете файл, то делаете return. А если не открываете - пытаетесь считать :D
PS восклицательный знак забыли :D Название: Re: Побайтовое чтение файла Отправлено: Alex Custov от Сентябрь 25, 2013, 22:00 зачем открывать файл дважды? Индексация массива начинается с 0, а не с 1. Индекс d нигде не увеличивается, то есть идёт бесконечный цикл записи в data[1].
Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 22:05 А давайте посмотрим на код и... По коду выходит, если вы открываете файл, то делаете return. А если не открываете - пытаетесь считать :D Так то оно так, Восклицательный знак там был раньше. И срабатывал return.PS восклицательный знак забыли :D Системные права разрешают все и всем. Странно... Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 22:07 зачем открывать файл дважды? Индексация массива начинается с 0, а не с 1. Индекс d нигде не увеличивается, то есть идёт бесконечный цикл записи в data[1]. К сожалению это не суть проблемы. Это просто заглушка.Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 22:33 Код: QString dbg; Текстовые файлы из той же директории открываются на ура.... Название: Re: Побайтовое чтение файла Отправлено: Bepec от Сентябрь 25, 2013, 22:50 Стоит сделать.
1) вывести в дебаг полный получившийся путь к файлу. 2) ввести проверку на существование файла и вывести в дебаг. 3) вернуть на место проверку на открытие файла и ... вывести в дебаг. 4) если файл открыт - вывести размер файла. 5) если не открыт - вывести errorString в дебаг и увидеть таки ошибку. 6) если всё открыто и размер кошерный - попытаться прочитать всё в массив и сразу проверить размер. И... вывести в дебаг. 7) если массив есть, а размера нет - брать бубен и стучать до посинения данного бага. Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 23:05 4) если файл открыт - вывести размер файла. Собака была зарыта здесь. Размер =0 Так со всеми бинарниками!!! В чем загвоздка? QFile вроде как должен открывать....... Название: Re: Побайтовое чтение файла Отправлено: kambala от Сентябрь 25, 2013, 23:20 target.open(QFile::ReadOnly) хоть true возвращает?
Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 23:34 Код: if (!target.open(QIODevice::ReadOnly)); И без восклицательного знака тоже выполняется.... Название: Re: Побайтовое чтение файла Отправлено: kambala от Сентябрь 25, 2013, 23:38 ; не надо в строке с ифом ставить — это означает, что тело условия пустое
Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 25, 2013, 23:42 Код: bool b=0; извините соврал. false Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 26, 2013, 10:19 Нашел ошибку.
Код: void MainWindow::OpenDi() currentDir - это private член класса. В теле указанного слота все устанавливается так как надо, но после его завершения, currentDir становится равным директории проекта. Подскажите пожалуйста, как сохранить изменения currentDir. Я уверен, что проблема будет решена. Заранее спасибо. Название: Re: Побайтовое чтение файла Отправлено: Bepec от Сентябрь 26, 2013, 10:22 То у вас файл не открывается, сейчас уже приватный член класса изменяется.
У вас всё в интерфейсе сохраняется. И берите данные с интерфейса. Или же заведите переменную QString currentDir. PS c++ не изучали? Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 26, 2013, 17:21 К сожалению не помогло...
С путями теперь все нормально. QString помог с путями. Бинарники по прежнему не открываются..... Код: QString dbg=strCurDir + "/" + ui->comboFile->currentText(); // В dbg полный путь с именем файла. Любой текстовый файл из /etc открывается. В смысле "С интерфейса"? Название: Re: Побайтовое чтение файла Отправлено: Bepec от Сентябрь 26, 2013, 17:47 А давайте вы прочитаете моё сообщение - которое выше, с пунктами. И постепенно, не торопясь, напишите код, который им всем удовлетворяет.
Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 26, 2013, 20:42 Код: QString dbg=strCurDir + "/" + ui->comboFile->currentText(); С текстовым файлом вывод такой: Код: "/etc/cowpoke.conf" Название: Re: Побайтовое чтение файла Отправлено: Bepec от Сентябрь 26, 2013, 21:00 Я не знаток linux. Но попробуйте перенести бинарный файл в ту же папку и переименовать его как текстовый файл. Не меняя ничего в программе. И посмотреть вывод.
PS я думаю что у вас что-то с правами. Название: Re: Побайтовое чтение файла Отправлено: skytrain от Сентябрь 26, 2013, 21:11 Действительно права. >:(
"/home/exp/67563.61339.dat" true true 787270 Не копируйте с винды папки без смены прав. позор мне..... Спасибо |