Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / чем "склеить" файл? / 21 сообщений из 21, страница 1 из 1
11.11.2013, 11:25
    #38459988
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Привет всем!

Я тащу с сервера большой файл (несколько Гигов), удалось скопировать 90% от файла и пользователь отключил программу (или компьютер, интернет и т.п.).

Необходимо при следующем включении программы докачать эти 10% и склеить с теми 90% (так, например, делает программа мюTorrent).

Скажите, в какую сторону мне рыть, чтобы это реализовать?
...
Рейтинг: 0 / 0
11.11.2013, 11:42
    #38460012
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Students,

System.IO.FileStream
...
Рейтинг: 0 / 0
11.11.2013, 11:44
    #38460018
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
А кто у нас "сервер"?
...
Рейтинг: 0 / 0
11.11.2013, 11:52
    #38460033
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
buserА кто у нас "сервер"?

не знаю, на сервере другие люди работают, нам просто говорят, напишите запрос, мы реализуем.

System.IO.FileStream - тут больше 1 Гб нельзя.
...
Рейтинг: 0 / 0
11.11.2013, 11:56
    #38460038
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Alex KuznetsovStudents,

System.IO.FileStream

Если, скажем первый файл 3Гб и докачать нужно 2Гб, то как я их склею?

Код: c#
1.
2.
3.
byte[] FStream2Content = new byte[FStream2.Length];
FStream2.Read(FStream2Content, 0, (int)FStream2.Length);
FStream1.Write(FStream2Content, 0, (int)FStream2.Length);
...
Рейтинг: 0 / 0
11.11.2013, 11:57
    #38460039
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
в таком виде будет переполнение массива, хотя можно точно! можно всё разбить на куски и потом склеивать.
...
Рейтинг: 0 / 0
11.11.2013, 11:57
    #38460040
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
да, всё.

всем спасибо, вроде разобрался
...
Рейтинг: 0 / 0
11.11.2013, 12:00
    #38460048
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Ну так и узнайте... поддерживает ли ваш сервер докачку... если да, то через какие механизмы. в противном случае... процесс придется повторять... а вот если поддерживает, то алгоритм тривиален :)
...
Рейтинг: 0 / 0
11.11.2013, 12:04
    #38460059
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
buserНу так и узнайте... поддерживает ли ваш сервер докачку... если да, то через какие механизмы. в противном случае... процесс придется повторять... а вот если поддерживает, то алгоритм тривиален :)

бывают встроенные механизмы?
я думал, что нужно:
1)зафиксировать, какой файл восстанавливался последним
2)сравнить его точный размер с размером на сервере (в байтах)
3)если размер не равен, то восстанавливаем начиная с нужного байта в другое место
4)склеиваем 2 куска.
...
Рейтинг: 0 / 0
11.11.2013, 12:15
    #38460093
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Вопрос то в чем? Нужно докачать оставшиеся 10% или они докачаны, и нужно дописать?

StudentsSystem.IO.FileStream - тут больше 1 Гб нельзя.
Почему?

Вот пример дописывания в конец файла:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		public static void Main (string[] args)
		{
			FileInfo fi = new FileInfo (@"file.txt");

			using (FileStream writer = fi.OpenWrite ()) {
				writer.Seek (0, SeekOrigin.End);

				byte[] buf = System.Text.Encoding.GetEncoding (1251).GetBytes ("77");
				writer.Write (buf, 0, buf.Length);
			}
		}
...
Рейтинг: 0 / 0
11.11.2013, 12:19
    #38460105
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Students, да бывают... далеко ходить не нужно... ftp
тогда алгоритм... читаем кусками фиксированного размера... после прочтения и успешной записи в конец файла +1... завалилось... подключились посмотрели сколько чанков выгрызли, передали серверу офсет... и понеслась дальше... сиком до конца последнего успешно записанного сегмента и пишем.... Это самый тупой вариант...
...
Рейтинг: 0 / 0
11.11.2013, 12:22
    #38460113
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Arm79Вопрос то в чем? Нужно докачать оставшиеся 10% или они докачаны, и нужно дописать?

StudentsSystem.IO.FileStream - тут больше 1 Гб нельзя.
Почему?

Вот пример дописывания в конец файла:
Код: c#
1.
byte[] buf = System.Text.Encoding.GetEncoding (1251).GetBytes ("77");



у вас в этой строке переполнение будет, если байтов слишком много
...
Рейтинг: 0 / 0
11.11.2013, 12:23
    #38460116
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
buserStudents, да бывают... далеко ходить не нужно... ftp
тогда алгоритм... читаем кусками фиксированного размера... после прочтения и успешной записи в конец файла +1... завалилось... подключились посмотрели сколько чанков выгрызли, передали серверу офсет... и понеслась дальше... сиком до конца последнего успешно записанного сегмента и пишем.... Это самый тупой вариант...

да, похоже ваш вариант самый лучший. спасибо.
...
Рейтинг: 0 / 0
11.11.2013, 12:24
    #38460122
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Studentsу вас в этой строке переполнение будет, если байтов слишком много

У меня - не будет. Код - пример добавления порции байт в конец файла. Откуда эта порция - неважно. Глупо, конечно, выделять массив в оперативке сразу в гигабайт только организации буфера.

Если у вас есть второй файл, кто мешает читать порциями с него и дописывать в старый?
Если у вас MemorySteam, аналогично.
...
Рейтинг: 0 / 0
11.11.2013, 12:26
    #38460131
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Students,

Читать весь файл в буфер - моветон, особенно если он большого размера.

Как уже говорили - узнавайте у сервера размер итогового файла, разбивайте на приемлемые по размеру куски и выкачивайте, затем дописывайте кусочки в конец файла...
...
Рейтинг: 0 / 0
11.11.2013, 12:30
    #38460146
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
да, хорошо, я всё понял. спасибо за помощь
...
Рейтинг: 0 / 0
11.11.2013, 12:38
    #38460167
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Про контроль целостности крепко подумай.
...
Рейтинг: 0 / 0
11.11.2013, 12:53
    #38460208
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
НахлобучПро контроль целостности крепко подумай.
а есть варианты? Когда все докачал взял md5 и сравнил. Просто кто даст исходный md5 :) Во всяком случае торрент вроде так делает.
...
Рейтинг: 0 / 0
11.11.2013, 13:02
    #38460225
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
netivanа есть варианты? Когда все докачал взял md5 и сравнил. Просто кто даст исходный md5 :) Во всяком случае торрент вроде так делает.Перспектива: скачать 3 Гб, выяснить что где-то там в нем ошибка и качать все заново, опять без гарантий корректности.
...
Рейтинг: 0 / 0
11.11.2013, 14:05
    #38460362
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
Нахлобучnetivanа есть варианты? Когда все докачал взял md5 и сравнил. Просто кто даст исходный md5 :) Во всяком случае торрент вроде так делает.Перспектива: скачать 3 Гб, выяснить что где-то там в нем ошибка и качать все заново, опять без гарантий корректности.
а ваши предложения? в любом случае без поддержки сервера мне кажется это невозможно.Или все качать по 2 раза и сравнивать?:)
...
Рейтинг: 0 / 0
11.11.2013, 14:50
    #38460470
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем "склеить" файл?
netivanа ваши предложения? в любом случае без поддержки сервера мне кажется это невозможно.Или все качать по 2 раза и сравнивать?:)
Да, поддержка докачки бесспорно потребуется (но она, я так понимаю, уже есть, кольк скоро ТС умеет докачивать последние 10%).

А в качестве решения -- например, можно хранить рядом со скачиваемым файлом еще один, в которм в n -й строке будет храниться md5 n -го мегабайта исходного файла, а на последней -- md5 всего, что было до этого. Сначала качаем этот маленький файл, потом начинаем скачивать большой, попутно считая хэши и сравнивая с известными.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / чем "склеить" файл? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]