powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / чем "склеить" файл?
21 сообщений из 21, страница 1 из 1
чем "склеить" файл?
    #38459988
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

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

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

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

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

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

System.IO.FileStream - тут больше 1 Гб нельзя.
...
Рейтинг: 0 / 0
чем "склеить" файл?
    #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
чем "склеить" файл?
    #38460039
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в таком виде будет переполнение массива, хотя можно точно! можно всё разбить на куски и потом склеивать.
...
Рейтинг: 0 / 0
чем "склеить" файл?
    #38460040
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, всё.

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

бывают встроенные механизмы?
я думал, что нужно:
1)зафиксировать, какой файл восстанавливался последним
2)сравнить его точный размер с размером на сервере (в байтах)
3)если размер не равен, то восстанавливаем начиная с нужного байта в другое место
4)склеиваем 2 куска.
...
Рейтинг: 0 / 0
чем "склеить" файл?
    #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
чем "склеить" файл?
    #38460105
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Students, да бывают... далеко ходить не нужно... ftp
тогда алгоритм... читаем кусками фиксированного размера... после прочтения и успешной записи в конец файла +1... завалилось... подключились посмотрели сколько чанков выгрызли, передали серверу офсет... и понеслась дальше... сиком до конца последнего успешно записанного сегмента и пишем.... Это самый тупой вариант...
...
Рейтинг: 0 / 0
чем "склеить" файл?
    #38460113
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Вопрос то в чем? Нужно докачать оставшиеся 10% или они докачаны, и нужно дописать?

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

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



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

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

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

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

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

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

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


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