Russian Qt Forum

Qt => Общие вопросы => Тема начата: Павелъ от Май 05, 2017, 14:34



Название: Как считать объёмный файл в qbytearray?
Отправлено: Павелъ от Май 05, 2017, 14:34
Доброго времени суток.

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

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

Как решить проблему?


Название: Re: Как считать объёмный файл в qbytearray?
Отправлено: __Heaven__ от Май 05, 2017, 14:40
http://stackoverflow.com/questions/16383392/how-to-get-the-sha-1-md5-checksum-of-a-file-with-qt


Название: Re: Как считать объёмный файл в qbytearray?
Отправлено: Павелъ от Май 05, 2017, 15:04
http://stackoverflow.com/questions/16383392/how-to-get-the-sha-1-md5-checksum-of-a-file-with-qt

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


Название: Re: Как считать объёмный файл в qbytearray?
Отправлено: kambala от Май 05, 2017, 15:06
папку можно рассматривать как особый «файл»


Название: Re: Как считать объёмный файл в qbytearray?
Отправлено: __Heaven__ от Май 05, 2017, 15:11
но тогда для папок каждый файл будет обрабатываться через создаваемый поток.
Что плохого?

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


Название: Re: Как считать объёмный файл в qbytearray?
Отправлено: qate от Май 05, 2017, 21:20
если проверять нужно только в linux, то можно встроенную md5sum использовать (через qprocess)
она и по каждому файлу и итог выдаст

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



Название: Re: Как считать объёмный файл в qbytearray?
Отправлено: Павелъ от Май 11, 2017, 11:17
Всем спасибо, засунул в поток, всё нормально.