![]() |
|
Модераторы: Poseidon |
![]()
|
|
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
Привет всем. Есть 2 вопроса:
1: Не могу скопировать файлы больше 2 гб. Помогите Я это делаю так и это не пашет:
2. А можно качать много файлов одновременно ? А надо чтобы, если вы поможте, выполнялись такие условия как: остановить копирование, продолжить с тогот места где остановили. Если много файлов, то как остановить выделенный или все, а потом докачать. Ребята, перерыл весь инет, все форумы, ну так как я только учусь, я не могу разобраться даже в литературе, а на других форумах если и что то отвечают, то не доконца или смеются надомной. Помогите пожайлуста. Мнеб желательно пример с коментариями. Заранее благодарен. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 6 Всего: 78 |
С точки зрения пользователя - можно (визуально) А с точки зрения машины нельзя. Порт для скачивания только один... Поэтому побайтно скачивать каждый файл прийдется. А насчет остановки и докачки поищи на форуме. Вопрос неоднократно задавался. -------------------- Ll 2 |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
Поискал, не нашел ответа вообще, тока один пример как у меня
А копирование больше 2 гб вообще нет, тем более с докачкой. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Вроде бы никаких проблем нет с копированием файлов любого размера.
Специально пример написал:
Файл размером более 9Гб был скопирован без проблем. -------------------- |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
Вообще не работает
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Шли, конечно. Постараюсь глянуть оперативно. Но сильно загружен на работе. PS. у меня Delphi6. palmih<>gmail.com -------------------- |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
Заработало
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
ZBugz,
Твой исправленный проект прикрепляю прямо сюда - вдруг интересно еще кому будет.
См. измененные места, они помечены как (*Changed*) Присоединённый файл ( Кол-во скачиваний: 28 )
proba1.ra_ 3,79 Kb-------------------- |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
Пашет, но очень медленно. Что то тут не так
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Ну так естественно. Код ведь не оптимизирован. После копирования каждого блока обновляется VCL. А это не правильно. -------------------- |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Задача не так проста, как кажется.
Давай начнем с самого начала. Сначала поставим корректно задачу, потом по шагам ее реализуем. Общая задача. Необходимо реализовать копирование файлов в отдельном потоке/потоках с возможностью остановки/возобновления копирования и возможностью динамического добавления файлов для копирования. Сразу возникает пара вопросов - 1. Приведет ли разделение копирования по нескольким потокам к уменьшению общего времени копирования и при каких условиях? 2. Каким образом определять, что копирование было прервано после его возобновления? На первый вопрос можно ответитить так: Уменьшение времени копирования возможно в том случае, если диски участвующие в копировании(исходный и выходной) будут разными физическими дисками. Ускорение копирования будет за счет того, что во время записи в одном потоке одновременно будет производиться чтение в другом. Уменьшение времени будет за счет того времени, пока контроллер дисков занимается операциями ввода вывода. Т.е. можно предполагать, что количество потоков более 1 позволит при таком условии уменьшить общее время копирования. Сложно сказать, какое количество потоков будет оптимальным, но думаю, что не стоит его делать больше 2. Ответ на второй вопрос. Нужно ли определять ситуацию, когда копирование было прервано, а затем возобновлено. Вряд ли. Для определения того, что копирование не закончилось, достаточно сравнить размеры входного и выходного файлов, в случае, если они отличаются(размер выходного меньше), копирование продолжается с соответствующей позиции. Для обработки такой ситуации можно выставить флаг перед копированием - заменять файлы при копировании, либо продолжать. Возможна ситуация, когда размер выходного файла больше входного. Такой вариант означает, что файл не соответствует копируемому. В этом случае необходимо поднять исключение, прервать копирование полностью и сообщить пользователю. Добавлено @ 11:25 Далее общую задачу можно разбить на несколько более мелких подзадач: Исходя из общей постановки задачи необходимо создать: 1. класс потокобезопасной очереди для помещения в нее заданий на копирование; 2. класс для потокобезопасного ведения протокола копирования; 3. класс собственно для копирования 4. класс для управления потоками копирования Добавлено @ 11:30 После этого можно начать реализовывать отдельные подзадачи. 1. TSafeQueue 2. TSafeLog 3. TCopier 4. TMgrCopier Добавлено @ 11:34 1. TSafeQueue Можно реализовать как простейший двусвязный список, в котором обращение к элементам защищено критической секцией. Например:
Это сообщение отредактировал(а) Демо - 21.2.2006, 11:48 -------------------- |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
2. TSafeLog
-------------------- |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
||||
|
||||
| Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Так как это самый сложный класс, связанный с TCopier, начнем с него. Для начала "костяк", или "рыба", на которую будем наращивать мускулы класса:
Добавлено @ 13:38 Это о том, что после прерырывания программы, и после того, как она заново стартует, нужно определить, что нужно продолжить копирование, а не начать с начала. Это сообщение отредактировал(а) Демо - 21.2.2006, 13:37 -------------------- |
||||
|
|||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: нет Всего: 6 |
Demo STOP ! Я уже и 1% не пойму что ты написал Давай покап один доделаем пример, хорошо ? |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |