powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Заархивировать файлы
25 сообщений из 107, страница 2 из 5
Заархивировать файлы
    #38303092
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2,

я не придираюсь, для отправки BLOB в базу совершено необязательно(бывает и невозможно) весь BLOB предварительно помещать в массив
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303110
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooldeveloper2Что делать с файлами нетривиального размера?
В зависимости от задачи. Если нужно писать в БД, то так или иначе нужна конвертация в массив байт. Так же если нужно файл снять с БД и отправить в Response клиенту - тоже нужна байтовая конвертация.
Для тех, кто окончательно заперся в танке: суть рецепта в том, чтобы показать, как можно удобно работать со штатным архиватором, а не в том, чтобы научить пользоваться стримом. Сечешь фишку?
Для тех, кому нужна работа именно через стрим, пишется по аналогии еще один метод:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public static MemoryStream Create(params ZipMemory[] data)
{
    var stream = new MemoryStream();
    var package = ZipPackage.Open(stream, FileMode.Create);
    foreach (var file in data)
    {
        Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(file.FileName, UriKind.Relative));
        PackagePart packagePartDocument = package.CreatePart(partUriDocument, string.Empty);
        file.Body.CopyTo(packagePartDocument.GetStream());
    }
    package.Close();
    return stream;
}



В чем проблема?

P.S. Для ряда задач требовалось работать исключительно с массивом байт и только с ним. Так ты ответь на вопрос, с массивом байт запрещено работать, что ли?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303119
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилдля отправки BLOB в базу совершено необязательно(бывает и невозможно) весь BLOB предварительно помещать в массив
Для 99.9% задач (особенно для EF и L2S) требуется обязательно помещать такой объект в массив. Читать про System.Data.Linq.Binary и иже.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303120
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2Умничка, пятерка! А причем тут File.ReadAllBytes?
Повторю:

НахлобучПри том, что File.ReadAllBytes прекрасно иллюстрирует ущербность такого подхода. Что делать с файлами нетривиального размера?
И ты так и не сказал, как мне быть с большими файлами. Тоже в память читать?

cooldeveloper2А что тут читать и соскакивать? Мне не нужны на входе и выходе стримы, мне нужен честный поток байтов, чтобы отправить его, например, в БД. Зачем мне тут стрим?Так ты прочитал? И скажи, ты различаешь понятия "поток" и "массив"? Допущу, что это опечатка, но это не отменяет следующего наблюдения.

Если тебе "не нужные на входе и выходе стримы", то это совершенно не значит, что они не нужны остальным. Форум читают люди разного уровня и новички вполне могут взять и скопировать твой код как есть. Если принять сам феномен карго-культа в программировании как данность, то остается безрадостный факт: в их проект попадет код, который в общем случае будет заваливать систему по OutOfMemoryException. Коли ты решил делиться знаниями, то делай это со всей ответственностью. В интернете и так хватает плохого кода.

cooldeveloper2Ущербность подхода в твоей голове, которая не понимает, что собрать байтовый массив можно любым другим способом. Сечешь фишку?Давай ты уже вырастешь над собой и прекратишь использовать аргументацию ad hominem?

К тому же, решение а-ля
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class ZipArray : IDisposable
{
    public ZipArray(Stream outputStream)
    {
        // ...
    }

    public void Add(Stream inputStream)
    {
        // ...
    }

    public void Flush()
    {
        // ...
    } 
}


будет гораздо более общно и менее ресурсоемко твого жонглирование массивами байтов.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303122
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2Если нужно писать в БД, то так или иначе нужна конвертация в массив байт.
чанками (chunk) писать религия запрещает?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303140
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2
Код: c#
1.
2.
3.
4.
5.
6.
public static MemoryStream Create(params ZipMemory[] data)
{
    var stream = new MemoryStream();
    // ...
    return stream;
}



В чем проблема?
Nice try, bro. Давай пока не касаться зверя под названием ZipMemory.

Скажи мне, архив где будет сформирован? Мне кажется, что он снова целиком окажется в памяти.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303152
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НахлобучИ ты так и не сказал, как мне быть с большими файлами. Тоже в память читать?
Выше написал.

НахлобучТак ты прочитал? И скажи, ты различаешь понятия "поток" и "массив"? Допущу, что это опечатка, но это не отменяет следующего наблюдения.
Что ты куришь там у себя? Еще раз повторяю, рецепт сделан только под байтовый обмен. Если нужна адаптация под потоковый ввод вывод, класс дополняется еще двумя методами. В чем проблема?

НахлобучЕсли тебе "не нужные на входе и выходе стримы", то это совершенно не значит, что они не нужны остальным.
Если другим нужны стримы, то это совершенно не значит, что они должны фигурировать в моем рецепте, который учит работать с классом ZipPackage.

НахлобучФорум читают люди разного уровня и новички вполне могут взять и скопировать твой код как есть.
Его и так можно копировать как есть, он полностью рабочий и отлаженный. Заточен только под байтовые операции.

НахлобучДавай ты уже вырастешь над собой и прекратишь использовать аргументацию ad hominem?
Давай ты уже поумнеешь и начнешь аргументировать по существу, а не лишь бы ляпнуть.

НахлобучК тому же, решение а-ля будет гораздо более общно и менее ресурсоемко твого жонглирование массивами байтов.
Не принципиально абсолютно. Для стримов можно ввести второй класс.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303165
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилcooldeveloper2Если нужно писать в БД, то так или иначе нужна конвертация в массив байт.
чанками (chunk) писать религия запрещает?
Пример чанков MemoryStream для EF в студию.

P.S. Даже SqlFileStream (SQL Server FileStream) читает только массив байт. В чем проблема?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303168
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобучcooldeveloper2
Код: c#
1.
2.
3.
4.
5.
6.
public static MemoryStream Create(params ZipMemory[] data)
{
    var stream = new MemoryStream();
    // ...
    return stream;
}



В чем проблема?
Nice try, bro. Давай пока не касаться зверя под названием ZipMemory.

Скажи мне, архив где будет сформирован? Мне кажется, что он снова целиком окажется в памяти.

Отгадай с двух раз?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class ZipMemory
{
    public string FileName { get; set; }
    public MemoryStream Body { get; set; }
    public ZipMemory(string fileName, MemoryStream body)
    {
        FileName = fileName;
        Body = body;
    }
}
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303211
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НахлобучЕсли тебе "не нужные на входе и выходе стримы", то это совершенно не значит, что они не нужны остальным
Вопрос для теоретиков, которые много думают, но мало делают: рассмотрим штатный класс SqlFileStream , который предназначен для работы с MS SQL FileStream. Почему разработчики класса предусмотрели Read / Write только для байтового массива?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303229
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2Вопрос для теоретиков, которые много думают, но мало делают: рассмотрим штатный класс SqlFileStream , который предназначен для работы с MS SQL FileStream. Почему разработчики класса предусмотрели Read / Write только для байтового массива?Раз уж ты заговорил, то рассмотри за компанию штатные классы FileStream, MemoryStream и прочих наследников Stream. Я уверен, что ты заметишь предусмотренные разработчиками методы ReadByte/WriteByte. Следовательно, твой аргумент некорректент.

Скажи мне лучше: ты различаешь принципиальную разницу между "считать все данные в память и создать архив в памяти" и "считать часть данных из потока, заархивировать и положить в другой поток"? Какой подход, по твоему мнению несомненного практика, который много делает, обладает большей общностью?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303231
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2Выше написал.Это ты про public static MemoryStream Create(params ZipMemory[] data)? Извини, незачет -- все как было в памяти, так и остается.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303252
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НахлобучРаз уж ты заговорил, то рассмотри за компанию штатные классы FileStream, MemoryStream и прочих наследников Stream. Я уверен, что ты заметишь предусмотренные разработчиками методы ReadByte/WriteByte. Следовательно, твой аргумент некорректент.
Не торопи коней с некорректностью. Итак, у меня есть файл на диске. Через File.OpenRead я инстанциирую честный FileStream для дескриптора этого файла. Пока всё хорошо, никаких преобразований в массив байт. Теперь мне нужно отправить этот файл в FILESTREAM сиквел сервера. Как раз для этих телодвижений используется SqlFileStream. Твои действия?

НахлобучСкажи мне лучше: ты различаешь принципиальную разницу между "считать все данные в память и создать архив в памяти" и "считать часть данных из потока, заархивировать и положить в другой поток"? Какой подход, по твоему мнению несомненного практика, который много делает, обладает большей общностью?
Отвечаю на заданный вопрос: я различаю (причем, принципиально) понятия "считать всё" и "считать только порцию". Так вот открою тебе истину: для большинства задач требуется именно работать с байтовыми операциями, а не с потоковыми. Примеры я приводил: считать / записать файл в базу, отправить файл в Response клиенту через Response.BinaryWrite, прочиать аплоад, снять массив байт с устройства, ну и так далее.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303253
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2НахлобучЕсли тебе "не нужные на входе и выходе стримы", то это совершенно не значит, что они не нужны остальным
Вопрос для теоретиков, которые много думают, но мало делают: рассмотрим штатный класс SqlFileStream , который предназначен для работы с MS SQL FileStream. Почему разработчики класса предусмотрели Read / Write только для байтового массива?самый универсальный метод.
в том числе для потоковой обработки: прочитал 1024 байта, обработал, отправил в респонс или куда там, и т.д.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303255
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобучcooldeveloper2Выше написал.Это ты про public static MemoryStream Create(params ZipMemory[] data)? Извини, незачет -- все как было в памяти, так и остается.
Присаживайся, двойка. Память чиста как девственный лес, имеется только указатель на дескриптор файла.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303258
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2Примеры я приводил: считать / записать файл в базу, отправить файл в Response клиенту через Response.BinaryWrite, прочиать аплоад, снять массив байт с устройства, ну и так далее.вот все эти вещи можно делать не целиком, а кусочками
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303259
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
seshДобрый день, подскажите пож-ста, выгружаю 2 файла на сервер, затем мне надо их заархивировать, не пойму как можно это сделать
Чё-то я не понимаю. ТС Написал:"...выгружаю 2 файла на сервер, затем мне надо их заархивировать...". При чём здесь какие-то стримы и т.п.?

Вызовите внешнюю программу (см. System.Diagnostics.Process, по-моему), например rar.exe или ещё чего.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303260
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Яростный Мечcooldeveloper2пропущено...

Вопрос для теоретиков, которые много думают, но мало делают: рассмотрим штатный класс SqlFileStream , который предназначен для работы с MS SQL FileStream. Почему разработчики класса предусмотрели Read / Write только для байтового массива?самый универсальный метод.
в том числе для потоковой обработки: прочитал 1024 байта, обработал, отправил в респонс или куда там, и т.д.
Именно, Меч. С байтами работать одно удовольствие - не нужно ничего диспоузить, не нужны никакие хендлы. Всё просто и очевидно: отдал байты, получил байты.
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303262
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2очевидно: отдал байты, получил байты.
ВСЕ байты то зачем за один приём?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303266
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Яростный Мечcooldeveloper2Примеры я приводил: считать / записать файл в базу, отправить файл в Response клиенту через Response.BinaryWrite, прочиать аплоад, снять массив байт с устройства, ну и так далее.вот все эти вещи можно делать не целиком, а кусочками
Ну вот я попросил Изопропила сделать чанкинг для EF. До сих пор пишет...
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303268
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилcooldeveloper2очевидно: отдал байты, получил байты.
ВСЕ байты то зачем за один приём?
А какие проблемы? Я кидаю файл в БД и руководствуюсь рекомендациями от MS по размеру блобов. Следовательно, никаких гигабайтов в базе не должно быть и в помине.
Где ответ на мой вопрос? 14453705
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303271
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2 отправить файл в Response клиенту через Response.BinaryWriteА чем Response.WriteFile не угодил?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303277
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariycooldeveloper2 отправить файл в Response клиенту через Response.BinaryWriteА чем Response.WriteFile не угодил?
А причем тут файл? Я прочитал из БД блоб (картинка) и хочу сразу отдать клиенту в Response. Ты предлагаешь картинку сохранять на диск?
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303280
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariycooldeveloper2 отправить файл в Response клиенту через Response.BinaryWriteА чем Response.WriteFile не угодил?он тут не совсем в тему, но насколько я знаю, лучше юзать Response.TransmitFile
...
Рейтинг: 0 / 0
Заархивировать файлы
    #38303282
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык кто-нибудь ответит? 14454110
...
Рейтинг: 0 / 0
25 сообщений из 107, страница 2 из 5
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Заархивировать файлы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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