如何正确的使用StreamWriter类? [英] how to use StreamWriter class properly?

查看:144
本文介绍了如何正确的使用StreamWriter类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的代码中,我使用StreamWriter类的文件操作,有没有在此代码的任何问题,我需要把try catch块收盘应该在finally块? ?或者这个代码就足够了。



 的StreamWriter SR =新的StreamWriter(streamFolder); 
sr.Write(详细信息);

File.SetAttributes(streamFolder,FileAttributes.Hidden);
sr.Close();


解决方案

请告诉我你的代码错误?如果有些异常会在您关闭流发生,那么流将保持开放,以及系统资源不会被释放:

 的StreamWriter SR =新的StreamWriter(streamFolder); 
sr.Write(详细信息);
//这里发生了一些异常
File.SetAttributes(streamFolder,FileAttributes.Hidden);
sr.Close();



所以,你需要确保,该流将被关闭。这可以通过实现尝试...最后块:

 的StreamWriter SR =新的StreamWriter(streamFolder); 


{
sr.Write(详细信息);
//这里发生了一些异常
File.SetAttributes(streamFolder,FileAttributes.Hidden);
}
终于
{
sr.Close();
}



但StreamWriter的农具的 IDisposable的接口,这样可以让C#编译器会自动为你做它用块包装作家使用到

 使用(StreamWriter的SR =新的StreamWriter(streamFolder))
{
sr.Write(详细信息) ;
//这里发生了一些异常
File.SetAttributes(streamFolder,FileAttributes.Hidden);
}

这代码将被编译为:

 的StreamWriter SR =新的StreamWriter(streamFolder); 


{
sr.Write(详细信息);
//这里发生了一些异常
File.SetAttributes(streamFolder,FileAttributes.Hidden);
}
终于
{
如果(SR!= NULL)
sr.Dispose();
}



手工执行之间的唯一区别是无效检查和方法的Dispose 被调用,而不是关闭。但实际上,当你调用关闭()的Dispose()相同的代码会被执行:

  this.Dispose(真); 
GC.SuppressFinalize(本);

您可以阅读更多的的 Dispose方法实现


I have code like this where i am using StreamWriter class for file operation, is there any problems in this code ,do i need to put try catch block closing should be in finally block ? or this code is sufficient?

   StreamWriter sr = new StreamWriter(streamFolder);
                  sr.Write(details);

                  File.SetAttributes(streamFolder, FileAttributes.Hidden);
                  sr.Close();

解决方案

Whats wrong with your code? If some exception will occur before you close stream, then stream will stay open, and system resources will not be released:

StreamWriter sr = new StreamWriter(streamFolder);
sr.Write(details);
// some exception occurs here 
File.SetAttributes(streamFolder, FileAttributes.Hidden);
sr.Close();

So, you need to be sure, that stream will be closed. This could be achieved by try...finally block:

StreamWriter sr = new StreamWriter(streamFolder);

try 
{
   sr.Write(details);
   // some exception occurs here 
   File.SetAttributes(streamFolder, FileAttributes.Hidden);
}
finally
{
   sr.Close();
}

But StreamWriter implements IDisposable interface, so you can let C# compiler do it automatically for you by wrapping writer usage into using block:

using(StreamWriter sr = new StreamWriter(streamFolder)) 
{
   sr.Write(details);
   // some exception occurs here 
   File.SetAttributes(streamFolder, FileAttributes.Hidden);
}

This code will be compiled as:

StreamWriter sr = new StreamWriter(streamFolder);

try 
{
   sr.Write(details);
   // some exception occurs here 
   File.SetAttributes(streamFolder, FileAttributes.Hidden);
}
finally
{
   if (sr != null)
      sr.Dispose();
}

The only difference between manual implementation is null-check and method Dispose is called instead of Close. But actually when you call Close() or Dispose() same code will be executed:

this.Dispose(true);
GC.SuppressFinalize(this);

You can read more on Dispose method implementation.

这篇关于如何正确的使用StreamWriter类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆