Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 02.12.2013
Сообщений: 37

Непонятные особенности конструкции using (){ } при использовании StreamWriter

28.10.2021, 11:05. Показов 1628. Ответов 3

Студворк — интернет-сервис помощи студентам
Объясните, пожалуйста, поведение объекта StreamWriter в двух случаях. В первом случае метод WriteLine(s); не записывает в файл ничего. Хотя во время отладки показано, что он успешно выполняется. Файл создаётся, но он пуст. Во втором случае всё работает надёжно. Видимо, здесь скрыты какие-то внутренние механизмы .Net. Проблема принципиально решена - второй вариант рабочий, но я хочу понять что происходит. И второй вариант обладает недостатком - требуется каждый раз создавать объект. Если получится разобраться, что происходит в первом случае, перейду на него. Если кто-то знает, пожалуйста, расскажите.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static class Log
    {
        public static ObservableCollection<string> logs = new ObservableCollection<string>();
        static object locker = new object();
 
        private static StreamWriter sw = new StreamWriter(Global.path_to_log_file, true, System.Text.Encoding.Default);
 
        public static void log(string s)
        {
            lock (locker)
            {
                logs.Add(s);
 
                sw.WriteLine(s);
            }
 }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 static class Log
    {
        public static ObservableCollection<string> logs = new ObservableCollection<string>();
        static object locker = new object();        
 
        public static void log(string s)
        {
            lock (locker)
            {
                logs.Add(s);
                using (StreamWriter sw = new StreamWriter(Global.path_to_log_file, true, System.Text.Encoding.Default))
                {
                    sw.WriteLine(s);
                }
            }
 }
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2021, 11:05
Ответы с готовыми решениями:

Ошибки при использовании конструкции if-else.
Всех с наступающим! Ребята, подскажите в чем ошибка?

Потеря переменной при использовании конструкции исключений
После данного фрагмента процедуры, IDE теряет переменную f1, с чем это связано и как избежать этого? try { ...

Синтаксическая ошибка при использовании конструкции ::ssize_t
Скачал официальную библиотеку Image Magick. Добавил в проект. Не компилится, ругается на синтаксис. Открываю один из хедеров и вижву вот...

3
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
28.10.2021, 11:32
Лучший ответ Сообщение было отмечено brddrdtt как решение

Решение

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

Чтобы записалось сразу можно вызвать метод Flush() или установить свойство AutoFlush в значение true.
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,115
Записей в блоге: 2
28.10.2021, 14:18
Цитата Сообщение от brddrdtt Посмотреть сообщение
Непонятные особенности конструкции using (){ }
По сути разворачивается в такую конструкцию (для вашего кода):
C#
11
12
13
14
15
16
17
18
19
20
                {
                    // Вхождение в using
                    StreamWriter sw = new StreamWriter(Global.path_to_log_file, true, System.Text.Encoding.Default)
                    IDisposable varUsing = sw;
 
                    sw.WriteLine(s);
 
                    // Выход из using
                    varUsing.Dispose();
                }
А уже в самом типе StreamWriter в реализации метода Dispose() вызывается ещё и метод Close(), в котором происходит закрытие потока и запись всех его данных.
2
0 / 0 / 1
Регистрация: 02.12.2013
Сообщений: 37
28.10.2021, 14:29  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Запись идет в буфер, по мере наполнения которого данные записываются на диск.
Чтобы записалось сразу можно вызвать метод Flush() или установить свойство AutoFlush в значение true.
помогло, спасибо.


Тему желательно переименовать на "особенности работы StreamWriter".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2021, 14:29
Помогаю со студенческими работами здесь

Почему при использовании gai_strerror() вместо информации об IP выводятся непонятные символы?
struct addrinfo hints; struct addrinfo *addrptr; hints.ai_family = Domen; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol...

Непонятные конструкции
Решил порыться в исходниках игрового движка X-Ray, и встретил несколько непонятных (для меня) объявлений: Что за спецификатор стоит...

VS сообщает о проблеме в коде при использовании конструкции "using UnityEngine;"
Почему когда я запускаю файл .cs через unity5 , то Visual Studio не подчеркивает красным using UnityEngine; , а когда запускаешь VS и...

Следует сравнить отличия в использовании операторов различной конструкции
(For и While или For и Repeat) Результаты измерения роста юношей и девушек одной группы заданны массивом (рост юношей со знаком минус). ...

Выдает непонятные ошибки. Синтаксические и пишет о незаявленном использовании функции
#include&lt;iosteram.h&gt; #include&lt;cmath&gt; void proc( int n, int m, int l, int k, float &amp;rez) { float chislitel= ((double pow(double...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru