Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/1: Рейтинг темы: голосов - 1, средняя оценка - 5.00
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407

Множество FileStream

20.06.2024, 14:00. Показов 427. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача довольно абстрактная, но интересно может есть какой-то паттерн решающий эту проблемму:
Короче у меня есть парсер, и он читает данные из одного файла, и записывает одновременно с этим кучу других файлов, соответствено у меня целая куча вложенных в друг друга юзингов FileStream. С ведением проекта я понял, что кол-во их будет только увеличиваться. Есть ли какой-то метод, чтоб их сгруппировать куда-то, или метод который их будет автоматически генерировать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public void Parser()
{
    using (FileStream fsr = new FileStream(filepath, FileMode.Open))
    {
        using (StreamWriter swl = new StreamWriter(new FileStream(fileManager.logDir + "//" + DateTime.Now.ToString("HH_mm_ss") + "_log.txt", FileMode.Create)))
        {
            using (DisposableLazy<BinaryWriter> fsw = new DisposableLazy<BinaryWriter>(() => new BinaryWriter(new FileStream(fileManager.udpFileName, FileMode.OpenOrCreate))))
            {
                using (DisposableLazy<BinaryWriter> cfsw = new DisposableLazy<BinaryWriter>(() => new BinaryWriter(new FileStream(fileManager.cameraFileName, FileMode.OpenOrCreate))))
                {
                    //...
                }
            }
        }
    }
}
public sealed class DisposableLazy<T> : Lazy<T>, IDisposable where T : IDisposable
{
    public DisposableLazy(Func<T> valueFactory) : base(valueFactory)
    {
    }
 
    public void Dispose()
    {
        if (IsValueCreated)
        {
            Value.Dispose();
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2024, 14:00
Ответы с готовыми решениями:

Потокобезопасность, FileStream
пускаю потоки на выполнение этого метода: ... for (int b = 0; b &lt; fs.Length/10; b += 4) { fs.Seek(Convert.ToInt32(part) +...

FileStream to byte[]
У меня есть функция для декрипта файла с помощью AES. private static void DecryptFileAES(string sInputFilename, string...

FileStream.Position property
Здравствуйте, уважаемые знатоки :) Обрабатываю текстовый файл, считываю построчно через StreamReader, динамически пытаюсь перезаписать. ...

3
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
20.06.2024, 14:36
Цитата Сообщение от firnen_dragon Посмотреть сообщение
у меня целая куча вложенных в друг друга юзингов FileStream.
В шарпе есть using declaration feature:
C#
1
2
3
4
5
6
7
8
{ 
    using var f1 = new FileStream("...");
    using var f2 = new FileStream("..."), f3 = new FileStream("...");
    ...
    // Dispose f3
    // Dispose f2 
    // Dispose f1
}
Добавлено через 1 минуту
В версии C# 8 появилось.
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
20.06.2024, 14:41
firnen_dragon, как вариант можно сделать метод который будет создать все объекты и вызывать делегат
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void Parser(Action<FileStream, StreamWriter, DisposableLazy<BinaryWriter>, DisposableLazy<BinaryWriter>> action)
{
    using (FileStream fsr = new FileStream(filepath, FileMode.Open))
    {
        using (StreamWriter swl = new StreamWriter(new FileStream(fileManager.logDir + "//" + DateTime.Now.ToString("HH_mm_ss") + "_log.txt", FileMode.Create)))
        {
            using (DisposableLazy<BinaryWriter> fsw = new DisposableLazy<BinaryWriter>(() => new BinaryWriter(new FileStream(fileManager.udpFileName, FileMode.OpenOrCreate))))
            {
                using (DisposableLazy<BinaryWriter> cfsw = new DisposableLazy<BinaryWriter>(() => new BinaryWriter(new FileStream(fileManager.cameraFileName, FileMode.OpenOrCreate))))
                {
                    action(fsr, swl, fsw, cfsw);
                }
            }
        }
    }
}
C#
1
2
3
4
5
Parser(DoParse);
...
void DoParse(FileStream fsr, StreamWriter swl, DisposableLazy<BinaryWriter> fsw, DisposableLazy<BinaryWriter> cfsw)
{
}
1
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
20.06.2024, 16:05  [ТС]
IamRain, OwenGlendower, Спасибо, неплохие решения, попробую
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2024, 16:05
Помогаю со студенческими работами здесь

FileStream ProgresBar в label
Всем привет. Озадачился написанием лаунчера, решил большинство проблем, но встал в тупи с прогресбаром. Смысл такой что облазил весь форум...

FileStream теряет байты
Здравствуйте, делал приложение на .net core для передачи данных по сети, но постоянно терялись последние байты. Методом тыка понял что...

ProgressBar для FileStream
Решил поделиться решением, может кому пригодится. Есть FileStream (и метод десериализации для моей задачи, но это не важно), и открывает...

Недозапись сектора FileStream
Привет ! Нужна помощь ! Проблема следующая - цикл недозаписывает сектора на диск. // StatusSektors указывает сколько секторов...

Хранение файлов в FileStream
Привет Всем. Имеем MSSQL 2008, таблица с полем файлстрим. Задача - со стороны клиента добавлять файлы в базу и открывать их. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru