|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Привет всем! Я тащу с сервера большой файл (несколько Гигов), удалось скопировать 90% от файла и пользователь отключил программу (или компьютер, интернет и т.п.). Необходимо при следующем включении программы докачать эти 10% и склеить с теми 90% (так, например, делает программа мюTorrent). Скажите, в какую сторону мне рыть, чтобы это реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:25 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Students, System.IO.FileStream ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:42 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
А кто у нас "сервер"? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:44 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
buserА кто у нас "сервер"? не знаю, на сервере другие люди работают, нам просто говорят, напишите запрос, мы реализуем. System.IO.FileStream - тут больше 1 Гб нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:52 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Alex KuznetsovStudents, System.IO.FileStream Если, скажем первый файл 3Гб и докачать нужно 2Гб, то как я их склею? Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:56 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
в таком виде будет переполнение массива, хотя можно точно! можно всё разбить на куски и потом склеивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:57 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
да, всё. всем спасибо, вроде разобрался ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 11:57 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Ну так и узнайте... поддерживает ли ваш сервер докачку... если да, то через какие механизмы. в противном случае... процесс придется повторять... а вот если поддерживает, то алгоритм тривиален :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:00 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
buserНу так и узнайте... поддерживает ли ваш сервер докачку... если да, то через какие механизмы. в противном случае... процесс придется повторять... а вот если поддерживает, то алгоритм тривиален :) бывают встроенные механизмы? я думал, что нужно: 1)зафиксировать, какой файл восстанавливался последним 2)сравнить его точный размер с размером на сервере (в байтах) 3)если размер не равен, то восстанавливаем начиная с нужного байта в другое место 4)склеиваем 2 куска. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:04 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Вопрос то в чем? Нужно докачать оставшиеся 10% или они докачаны, и нужно дописать? StudentsSystem.IO.FileStream - тут больше 1 Гб нельзя. Почему? Вот пример дописывания в конец файла: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:15 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Students, да бывают... далеко ходить не нужно... ftp тогда алгоритм... читаем кусками фиксированного размера... после прочтения и успешной записи в конец файла +1... завалилось... подключились посмотрели сколько чанков выгрызли, передали серверу офсет... и понеслась дальше... сиком до конца последнего успешно записанного сегмента и пишем.... Это самый тупой вариант... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:19 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Arm79Вопрос то в чем? Нужно докачать оставшиеся 10% или они докачаны, и нужно дописать? StudentsSystem.IO.FileStream - тут больше 1 Гб нельзя. Почему? Вот пример дописывания в конец файла: Код: c# 1.
у вас в этой строке переполнение будет, если байтов слишком много ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:22 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
buserStudents, да бывают... далеко ходить не нужно... ftp тогда алгоритм... читаем кусками фиксированного размера... после прочтения и успешной записи в конец файла +1... завалилось... подключились посмотрели сколько чанков выгрызли, передали серверу офсет... и понеслась дальше... сиком до конца последнего успешно записанного сегмента и пишем.... Это самый тупой вариант... да, похоже ваш вариант самый лучший. спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:23 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Studentsу вас в этой строке переполнение будет, если байтов слишком много У меня - не будет. Код - пример добавления порции байт в конец файла. Откуда эта порция - неважно. Глупо, конечно, выделять массив в оперативке сразу в гигабайт только организации буфера. Если у вас есть второй файл, кто мешает читать порциями с него и дописывать в старый? Если у вас MemorySteam, аналогично. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:24 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Students, Читать весь файл в буфер - моветон, особенно если он большого размера. Как уже говорили - узнавайте у сервера размер итогового файла, разбивайте на приемлемые по размеру куски и выкачивайте, затем дописывайте кусочки в конец файла... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:26 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
да, хорошо, я всё понял. спасибо за помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:30 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Про контроль целостности крепко подумай. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:38 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
НахлобучПро контроль целостности крепко подумай. а есть варианты? Когда все докачал взял md5 и сравнил. Просто кто даст исходный md5 :) Во всяком случае торрент вроде так делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 12:53 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
netivanа есть варианты? Когда все докачал взял md5 и сравнил. Просто кто даст исходный md5 :) Во всяком случае торрент вроде так делает.Перспектива: скачать 3 Гб, выяснить что где-то там в нем ошибка и качать все заново, опять без гарантий корректности. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 13:02 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
Нахлобучnetivanа есть варианты? Когда все докачал взял md5 и сравнил. Просто кто даст исходный md5 :) Во всяком случае торрент вроде так делает.Перспектива: скачать 3 Гб, выяснить что где-то там в нем ошибка и качать все заново, опять без гарантий корректности. а ваши предложения? в любом случае без поддержки сервера мне кажется это невозможно.Или все качать по 2 раза и сравнивать?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 14:05 |
|
чем "склеить" файл?
|
|||
---|---|---|---|
#18+
netivanа ваши предложения? в любом случае без поддержки сервера мне кажется это невозможно.Или все качать по 2 раза и сравнивать?:) Да, поддержка докачки бесспорно потребуется (но она, я так понимаю, уже есть, кольк скоро ТС умеет докачивать последние 10%). А в качестве решения -- например, можно хранить рядом со скачиваемым файлом еще один, в которм в n -й строке будет храниться md5 n -го мегабайта исходного файла, а на последней -- md5 всего, что было до этого. Сначала качаем этот маленький файл, потом начинаем скачивать большой, попутно считая хэши и сравнивая с известными. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2013, 14:50 |
|
|
start [/forum/topic.php?fid=20&msg=38460018&tid=1403706]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 185ms |
0 / 0 |