各种stream类中的close()方法

来源:百度知道 编辑:UC知道 时间:2024/06/14 20:21:26
请问一下 各种stream类中(FileStream、StreamWriter/Reader 等等的流操作)都有一个Close()的方法,这个方法应该在何时用呢??

俺看过MSDN 它的实例一般都把流操作放在Using块当中,有时候在操作最后不使用Close(),并且注释说Using块也可以关闭Stream

但是有些实例,它也使用Using块,但是在操作完毕时也照样使用Close()
比如下面两个例子:
例一:
// The using statement also closes the StreamWriter.
using (StreamWriter sw = new StreamWriter("TestFile.txt"))
{
// Add some text to the file.
sw.Write("This is the ");
sw.WriteLine("header for the file.");
sw.WriteLine("-------------------");
// Arbitrary objects can also be written to the file.
sw.Write("The date is: ");
sw.WriteLine(DateTime.Now);
}
这个Using块的最后它没有使用Close()
例二:
if (File.Exists(FILE_NAME))
{
Console.WriteLine("{0} already exists.", FILE_NAME);
return;

因为stream对象需要占用非托管资源(内存,系统I/O等),using是StreamWriter 使用完毕后释放StreamWriter使用的资源,当然也包括他的内部stream占用的资源。而close方法必须调用关闭流,因为可以保证文件完全写入。否则的话文件可能写入失败或者写入内容不全。

你不需要用它的时候就close
using(。。。。)这里创建的对象生存期在using语句块之内,出了这个语句块就会被GC

使用 using 的时候,可以不使用 close,但是使用也没关系,都可以