2010-12-07 4 views
0

, поэтому я разрабатываю свой собственный менеджер загрузки для образовательной цели. У меня есть несколько подключений/потоков, загружающих файл, каждое соединение работает в определенном диапазоне файлов. Теперь, после того как они все принесли свои куски, я не знаю, как мне собрать эти куски для повторного создания оригинального файла.Менеджер загрузки: как перестроить куски, полученные несколькими подключениями

Что я сделал:

Во-первых, я создал временный файл в режиме «Wb», и позволяет каждому соединения/темы сваливать свои куски. Но каждый раз, когда соединение делает это, он перезаписывает ранее сохраненные куски. Я понял, что это потому, что я использовал дескриптор файла «wb». Я изменил его на «аб», но я не могу больше выполнять искать() операции

Что я ищу:

Мне нужен элегантный способ повторной упаковки этот кусок к исходному файлу. Я хотел бы знать, как это делают другие менеджеры загрузки.

Благодарим заранее.

ответ

1

Вы делали это просто отлично: seek() и write(). Это должно сработать!

Теперь, если вы хотите создать более чистую структуру, без большого количества потоков, перемещающих руки по всему файлу, вы можете захотеть иметь потоки загрузчика и поток для записи на диск. Этот последний может просто спать до тех пор, пока не проснется одним из других, напишите немного kb на диск и снова вернетесь спать.

+0

Спасибо большое. Неудивительно, что использование ПК остается на уровне 100%, я думаю, это связано с тем, что потоки постоянно приобретают блокировку и сохраняют каждые 20 КБ загрузок. Спасибо – Kennedy 2010-12-07 17:26:30

2

Вам необходимо написать фрагменты его разных временных файлов, а затем присоединиться к ним в первоначальном порядке. Если вы откроете один файл для всех потоков, вы должны сделать доступ к нему последовательным, чтобы сохранить правильный порядок данных, который отбрасывает использование потоков, поскольку поток должен ждать предыдущего. BTW, вы должны открыть файлы в режиме wb.

+0

Спасибо. Особенно часть использования потока. Потоки ожидают выхода блокировки, что делает приложение довольно медленным. благодаря – Kennedy 2010-12-07 17:18:02