Russian Qt Forum

Qt => Общие вопросы => Тема начата: Zusykss от Август 08, 2017, 21:32



Название: Загрузка файлов 2гб и больше
Отправлено: Zusykss от Август 08, 2017, 21:32
Слушайте загружаю файл 2гб из сайта на комп, пример ссылки
http://shareae.com/after-effects-presets/10190-red-giant-complete-suite-2017-for-adobe-cs5-cc-2017-for-win.html

Когда программа доходит до скачивания 1,8 гб, вылетает ошибка и программа завершается, хотя памяти на компе задействовано 57%
В чем может быть причина.
Файлы меньше 1 гига, по 200мб, 50, 60 , качаются без проблем :-\
И еще вопрос, правильно я сохраняю большие файлы,
Код:
if(archive.open(QIODevice::WriteOnly))
            {
                archive.write(m_Buffer);
                archive.close();
            }
Если нет киньте пример у кого есть
За ранее Благодарю!


Название: Re: Загрузка файлов 2гб и больше
Отправлено: qate от Август 08, 2017, 23:34
В чем может быть причина.

очевидно нужно включить отладчик, да посмотреть


Название: Re: Загрузка файлов 2гб и больше
Отправлено: Zusykss от Август 09, 2017, 06:39
В чем может быть причина.

очевидно нужно включить отладчик, да посмотреть


А что, там смотреть ?
Я запускаю программу она качает файлы записывает их на диск, если попадает файл больше 2 гигов, она его качает доходит до 1820мб , я по памяти смотрел в TaskMAnager, и вылететает.
Есть возможность сразу писать в поток?


Название: Re: Загрузка файлов 2гб и больше
Отправлено: qate от Август 09, 2017, 09:29
А что, там смотреть ?
Я запускаю программу она качает файлы записывает их на диск, если попадает файл больше 2 гигов, она его качает доходит до 1820мб , я по памяти смотрел в TaskMAnager, и вылететает.
Есть возможность сразу писать в поток?

очевидно, что отладчик остановится в месте сбоя и покажет где и что, а не просто "программа вылетает"
 
что такое "сразу писать в поток" ?


Название: Re: Загрузка файлов 2гб и больше
Отправлено: Zusykss от Август 09, 2017, 10:08


очевидно, что отладчик остановится в месте сбоя и покажет где и что, а не просто "программа вылетает"
 
что такое "сразу писать в поток" ?

[/quote]
Я сейчас тестирую вариант, через сигнал
QObject::connect(m_reply, &QNetworkReply::readyRead, this, &LoaderVideo::ReplyFinished);
QDataStream fout(file);
fout << m_reply->readAll();

Я считываю частями, и записываю.

Возможно это как раз то, что мне нужно.


Название: Re: Загрузка файлов 2гб и больше
Отправлено: ssoft от Август 09, 2017, 10:10
Причина в том, что ОС не может выделить больше оперативной памяти для приложения 32 bit разрядности.
Не пытайтесь закачать файл в оперативную память целиком. При скачивании части, которые уже записали в файл необходимо удалять из оперативной памяти.
Закачали часть -> дописали в конец файла -> удалили закачанную часть.

То есть должно быть что-то вроде

Код
C++ (Qt)
if ( archive.open( QIODevice::WriteOnly | QIODevice::Append ) )
{
   archive.write( packet );
   archive.close();
}
 


Название: Re: Загрузка файлов 2гб и больше
Отправлено: Zusykss от Август 09, 2017, 11:12
Причина в том, что ОС не может выделить больше оперативной памяти для приложения 32 bit разрядности.
Не пытайтесь закачать файл в оперативную память целиком. При скачивании части, которые уже записали в файл необходимо удалять из оперативной памяти.
Закачали часть -> дописали в конец файла -> удалили закачанную часть.

То есть должно быть что-то вроде

Код
C++ (Qt)
if ( archive.open( QIODevice::WriteOnly | QIODevice::Append ) )
{
   archive.write( packet );
   archive.close();
}
 

Благодарю за ответ, так и делаю...


Название: Re: Загрузка файлов 2гб и больше
Отправлено: Zusykss от Август 09, 2017, 12:12
Благодарю всех за ответы. Решение найдено.

 ;D