2012-01-17 2 views
1

У меня есть программа форм Windows C# .NET 3.5 с помощью этого метода:StreamWriter пишет только первые нитевидные

private void toLog(string sLog) 
    { 
     richTextBox1.Text += DateTime.Now.ToString("T") + ": " + sLog + "\n"; 
     richTextBox1.Update(); 
     richTextBox1.Refresh(); 
     using (StreamWriter writer = new StreamWriter("log.txt", true)) 
     { 
      writer.WriteLine(DateTime.Now.ToString("T") + ": " + sLog); 
      writer.Flush(); 
      writer.Dispose(); 
     } 

    } 

Идея заключается в том, что я могу представить записи журнала с ним, и он будет писать записи в обоих RichTextBox и файл журнала.

Вот что ... потоковый блок только пишет при первом вызове метода! Обновления richtextbox отлично. Flush() и Dispose() были чем-то, что я попробовал позже из отчаяния, но я предполагаю, что этот блок должен обработать это.

Любые идеи? Благодаря!

+1

Вы уверены, что исключение не выбрасывается и не попадает в другое место? –

+0

Вероятно, есть лучший способ, поэтому я размещаю это в комментариях, а не отвечу, но я попытаюсь открыть файл log.txt в качестве фильтра, а затем скопировать его в писатель, прежде чем я начну писать. –

+1

Строки 'writer.Flush()' и 'writer.Dispose()', безусловно, избыточны. В противном случае я не могу воспроизвести вашу проблему. В какую папку вы пишете? Возможно, попробуйте написать «Мои документы» вместо этого? –

ответ

4

Я думаю, проблема может быть в StreamWriter("log.txt",: путь может быть изменен внутри вашего приложения, поэтому вам лучше использовать полный путь здесь.
Пример:

string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
string log = Path.Combine(dir, "log.txt"); 
using (StreamWriter writer = new StreamWriter(log, true)) 
+0

Я попробую его и отчитаю, но он записывает файл успешно ... только в первый раз. –

+0

Это работает !! Можете ли вы уточнить, что здесь происходит? Почему он работает один раз, а затем больше нет? –

+0

Я вернул исходный код туда, но использовал полный путь к log.txt, и он тоже работал –

0

Вы можете использовать приведенный ниже пример:

using (StreamWriter writer = File.AppendText("log.txt")) 
{ 
    writer.WriteLine(DateTime.Now.ToString("T") + ": " + sLog); 
} 

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

+0

Нет, это тоже не работает. Спасибо, в любом случае. –

1

Я знаю, что опаздываю на вечеринку, но это помогло мне с подобной ситуацией и, возможно, это поможет кому-то еще.

У меня была такая же проблема, когда потоковейщик записывал только первую строку в файле и ничего больше. Я смог исправить это с помощью FileStream:

using (FileStream fileStream = File.Open("log.txt", FileMode.Open)) 
{ 
    using (StreamWriter streamWriter= new StreamWriter(fileStream)) 
    { 
     writer.WriteLine(DateTime.Now.ToString("T") + ": " + sLog); 
    } 
}