如何正确的使用StreamWriter类? [英] how to use StreamWriter class properly?
问题描述
我有这样的代码中,我使用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屋!