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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как считать объёмный файл в qbytearray?  (Прочитано 5961 раз)
Павелъ
Гость
« : Май 05, 2017, 14:34 »

Доброго времени суток.

Сделал программку для подсчёта контрольных сумм файлов и папок. Если файлы небольшие, то QByteArray с лёгкостью принимает file.readAll(). Но, если файл слишком большой, то QByteArray становится пустым.

Как взять контрольную сумму объёмного файла? Можно считывать файл по частям в несколько QByteArray и от каждого QByteArray брать контрольную сумму, а потом - всё в один QByteArray и от него уже контрольную сумму (так я делаю для папок), но для файла уже получится ненастоящая контрольная сумма.

Как решить проблему?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Май 05, 2017, 14:40 »

http://stackoverflow.com/questions/16383392/how-to-get-the-sha-1-md5-checksum-of-a-file-with-qt
Записан
Павелъ
Гость
« Ответ #2 : Май 05, 2017, 15:04 »


Спасибо, работает!
Только форма зависает. Я для папок делал QApplication::processEvent.
Придётся в отдельный поток эту функцию засовывать, но тогда для папок каждый файл будет обрабатываться через создаваемый поток.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4725



Просмотр профиля WWW
« Ответ #3 : Май 05, 2017, 15:06 »

папку можно рассматривать как особый «файл»
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Май 05, 2017, 15:11 »

но тогда для папок каждый файл будет обрабатываться через создаваемый поток.
Что плохого?

а потом - всё в один QByteArray и от него уже контрольную сумму
А дополнительный вызов QCryptographicHash::addData не избавляет от манипуляций со склейкой?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #5 : Май 05, 2017, 21:20 »

если проверять нужно только в linux, то можно встроенную md5sum использовать (через qprocess)
она и по каждому файлу и итог выдаст

но если и в венде и в linux надо, то одинаковой утилиты нет (если не тащить кусок cygwin)
лучше написать свою функцию, в потоке (qtconcurent)

Записан
Павелъ
Гость
« Ответ #6 : Май 11, 2017, 11:17 »

Всем спасибо, засунул в поток, всё нормально.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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