Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2010, 14:06   #1
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Смущение Exception

Здравствуйте, ув. программисты. Пишу на C sharp visual studio 2010. Исправте, пожалуйста, ошибку, вылетает Exception - Stream was not writable.
Вложения
Тип файла: txt code.txt (9.2 Кб, 125 просмотров)
pa6kevi4 вне форума Ответить с цитированием
Старый 09.06.2010, 19:25   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Хоть бы написал где.
Hollander вне форума Ответить с цитированием
Старый 09.06.2010, 23:40   #3
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Радость

Цитата:
Сообщение от Hollander Посмотреть сообщение
Хоть бы написал где.
class TxtLogger : ILogger
в нём
pa6kevi4 вне форума Ответить с цитированием
Старый 10.06.2010, 10:17   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Строку укажи.
Или ты думаешь, что кому-то интересно вылавливать ошибки.
Hollander вне форума Ответить с цитированием
Старый 10.06.2010, 12:19   #5
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Ладно, ошибки исправлять не будем, но у меня вопрос.

Как записать строки в один текстовой файл из двух потоков одновременно?
pa6kevi4 вне форума Ответить с цитированием
Старый 10.06.2010, 16:17   #6
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Никак, это невозможно. Можно просто блокировать один поток, пока пишет другой.
Hollander вне форума Ответить с цитированием
Старый 10.06.2010, 21:03   #7
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Радость

Цитата:
Сообщение от Hollander Посмотреть сообщение
Никак, это невозможно. Можно просто блокировать один поток, пока пишет другой.
Спасибо, понял.
Хотелось бы узнать, каким образом можно заблокировать один поток, пока пишет другой. Вот класс, который отвечает за логирование:

Код:
 class TxtLogger : ILogger
    {
        protected FileStream f1;
        protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
        protected string CurrentLogText;
        protected StreamWriter output;
        public void Log(string message, MessageType messageType)
        {
            f1 = new FileStream(FileName, FileMode.Append);
            output = new StreamWriter(f1);
            CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
            output.WriteLine(CurrentLogText);
            output.Close();
            f1.Close();
        }
    }
pa6kevi4 вне форума Ответить с цитированием
Старый 11.06.2010, 11:03   #8
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Я ещё придумал такой вариант, но он работает только если numberOfGen = 2; или numberOfGen = 1; Если ставить больше, выкинет Exeption

The process cannot access the file 'C:\Users\Pavel\Desktop\Folder\Outp ut1.txt' because it is being used by another process.

Код:
    class TxtLogger : ILogger
    {
        protected FileStream f1;
        protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
        protected string CurrentLogText;
        protected StreamWriter output;
        protected Queue lgrMsg = new Queue();

        public void Log(string message, MessageType messageType)
        {
            CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
            lgrMsg.Enqueue(CurrentLogText);

            f1 = new FileStream(FileName, FileMode.Append);
            output = new StreamWriter(f1);

            
            while (lgrMsg.Count > 0)
            {
                output.WriteLine(lgrMsg.Dequeue());
            }
            output.Close();
            f1.Close(); 
        }
    }
pa6kevi4 вне форума Ответить с цитированием
Старый 11.06.2010, 13:25   #9
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

numberOfGen - это переменная, отвечающая за кол-во раз, сколько будет вызываться метод лог в разных потоках
pa6kevi4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.Net генерируеn Exception Dimass Общие вопросы Delphi 2 07.06.2010 13:21
The server threw an exception Diego__ Microsoft Office Word 1 24.02.2010 18:56
Exception ereaderror Rin БД в Delphi 3 21.01.2010 00:52
IdTCPServer Exception Comer_Jus Работа с сетью в Delphi 2 25.06.2008 22:23
Unhandled Exception Chazki Общие вопросы Delphi 2 14.04.2007 14:05