2013-05-13 3 views
2

Я использую StreamWriter, чтобы писать вещи в блокнот. И я обнаруживаю, что я не использую оператор и экземпляр только StreamWriter. Метод не может работать. Кто-нибудь знает причину?C# using statement и StreamWriter

static void Main(string[] args) 
    { 
     //StreamWriter c = new StreamWriter(@"C:\Users\rxxx\Desktop\important.txt", true); 
     using (StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true)) 
     { 
      c.WriteLine("hello"); 
     } 

Это может быть запущено. Но если я запустил замеченную часть. Блокнот ничего не показывает.

Кто-нибудь знает причину?

+0

Спасибо всем !!! Вы, ребята, очень полезны. Английский язык Msdn слишком тверд и лаконичен для меня. Здесь так приятно обращаться за помощью. Еще раз спасибо. – martin

ответ

5

Потому что, когда вы используете объект в с помощью, которая хорошая практика, она вызывает метод Dispose и в случае StreamWriter его называют Fush на объекте, а что вызывает данные должны быть записаны в файле. вы могли бы написать такой код:

var c = new StreamWriter(@"C:\Test\important.txt", true); 
c.AutoFlush = true; 
c.WriteLine("hello"); 
c.Dispose(); 
1
StreamWriter c = new StreamWriter(@"C:\Users\rxxx\Desktop\important.txt", true); 
// you need to write something to see 
c.WriteLine("hello"); 

если вы используете using statement он будет автоматически утилизировать StreamWriter объект. Но когда вы не используете инструкцию, вам нужно вручную удалить объект StreamWriter. В этом случае также убедитесь, что даже в случае исключения вы правильно размещаете объект. так что вы можете сделать, как показано ниже

StreamWriter c =null; 
try 
{ 
    c = new StreamWriter(fileFullPath, true); 
    c.WriteLine("hello"); 
} 
finally 
{ 
    if (c!= null) 
     c.Close(); 
} 
0

используя заявление является «ОБЕСПЕЧИТЬ» объект в области будет склонным [MSDN]: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

using (StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true)) 
{ 
    c.WriteLine("hello"); 
} 

Если вы не используете с помощью заявления, Я по-прежнему рекомендуется использовать оператора Ьгу

try 
{ 
    StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true); 
} 
finally 
{ 
    c.Close(); 
} 
0

Если вы не используете, используя заявление, программа не смывать данные из буфера в файл. Вот почему «привет» не записывается в файл, когда вы открываете его в блокноте. Вы можете явно очистить буфер для того, чтобы иметь ваши данные записываются в файл:

StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true) 
c.WriteLine("hello"); 
c.Flush(); 

Однако, вам все равно нужно утилизировать поток. Но если вы используете метод Dispose(), он автоматически удаляет буфер (вызывая метод Flush()), поэтому вам не нужно использовать Flush()!

Используя оператор 'using', он не только очищает буфер, но и освобождает поток соответствующим образом, и вам не нужно явно писать Dispose(). Это лучший способ сделать это.