CFileStream类继承自FileStream : public class CFileStream : System.IO.FileStream
{
public CFileStream(
string path,
FileMode mode,
FileAccess access,
FileShare share)
: base(path, mode, access, share){}
....
}
使用CFileStream : public class CMap:IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
} protected virtual void Dispose(bool disposing)
{
if (!m_disposed)
{
if (disposing)
{
// Release managed resources
}
// Release unmanaged resources
fs.Close();
m_disposed = true;
}
}
~CMap()
{
Dispose(false);
}
private bool m_disposed; public CMap(string FileName)
{
....
fs = new CFileStream( FileName,FileMode.OpenOrCreate,
FileAccess.ReadWrite,FileShare.None);
....
}
...
}
起初,不管我在任何地方调用关闭流的Close方法(或是Dispose方法),当我第二次
运行程序时(当然是先关闭先前程序),程序就异常,说是文件被另一进程占用。于是我
从网上找到一个较为标准的资源释放方法:实现Dispose,不料问题依旧!! 我快崩溃了!这种问题在VC下是决不会出现的,C#智能到哪去了?别说替我回收,我让它
回收都没给我收回来啊:(
{
public CFileStream(
string path,
FileMode mode,
FileAccess access,
FileShare share)
: base(path, mode, access, share){}
....
}
使用CFileStream : public class CMap:IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
} protected virtual void Dispose(bool disposing)
{
if (!m_disposed)
{
if (disposing)
{
// Release managed resources
}
// Release unmanaged resources
fs.Close();
m_disposed = true;
}
}
~CMap()
{
Dispose(false);
}
private bool m_disposed; public CMap(string FileName)
{
....
fs = new CFileStream( FileName,FileMode.OpenOrCreate,
FileAccess.ReadWrite,FileShare.None);
....
}
...
}
起初,不管我在任何地方调用关闭流的Close方法(或是Dispose方法),当我第二次
运行程序时(当然是先关闭先前程序),程序就异常,说是文件被另一进程占用。于是我
从网上找到一个较为标准的资源释放方法:实现Dispose,不料问题依旧!! 我快崩溃了!这种问题在VC下是决不会出现的,C#智能到哪去了?别说替我回收,我让它
回收都没给我收回来啊:(
只要是从IDisposable集成来的类,都可以使用using来自动管理using程序块内的资源。
using(fs = new CFileStream( FileName,FileMode.OpenOrCreate,
FileAccess.ReadWrite,FileShare.None))
{
}
那样代码块结束就自动释放了,你也不必考虑哪里关闭
不能用using啊,我对一个FileStream对象的使用是在几个函数中,怎么让我用大括号把它们括起来?就是在一个函数中建立fs,但是对fs的使用是在几个函数中,怎么用using ?
2、如果按照LZ的想法,我觉得可以先用Close方法关闭,然后用Dispose()方法销毁
try
{
........
}
catch(IOException ex)
{
........
}
finally
{
fs.Close();
fs.Dispose();
}
不然你就应该实现一个Singleton类去管理它保证在整个函数只打开一次。
我测试了一下没有你说的情况啊. while (true)
{
FileStream fs = new FileStream(@"c:\1.txt", FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileShare.None);
fs.Close();
}
一直运行也没有发现你说的问题.
反正FileStream本身 是没发现
fs.Flush();
fs.close();
fs.dispose();
俺都不知道你继承类里面处理没处理 资源释放. 如果处理了,是不是处理的不对了..如果对的话.毛主席说了,不会出现那情况的.