我试图编写一个保持打开状态的类,StreamWriter
直到实例化的对象被破坏——这是为了避免正常的using
习惯用法,因为在程序运行时外部源不要编辑文件很重要(因此FileShare.Read
)。
实例化后,通过构造函数成功创建文件。对该方法的调用Write
实际上并不写任何东西,也不会抛出异常。sw.Close()
一旦对象被销毁,析构函数会在of上抛出异常Cannot access a closed file.
,即使BaseStream
is not 也是如此null
。我不确定我是否理解其中的原因。
这个问题遵循某种类似的方法,但在其他类型的类中。所以我认为这种方法应该有效,但无法确定为什么无效。
class SchemaWriter
{
private StreamWriter sw;
private string path;
/// <summary>
/// Creates an object to handle writing Schema.ini information
/// </summary>
/// <param name="Path">Path to place Schema.ini file in</param>
public SchemaWriter(string Path)
{
path = Path;
sw = new StreamWriter(File.Open(Path + "Schema.ini", FileMode.Create,
FileAccess.ReadWrite, FileShare.Read));
}
/// <summary>
/// Writes Schema information about the supplied file name
/// </summary>
/// <param name="FileName">Name of file to write the Schema info about</param>
public void Write(string FileName)
{
sw.WriteLine(String.Format(@"[{0}]", FileName));
sw.WriteLine(@"Format=TabDelimited");
sw.WriteLine();
}
/// <summary>
/// Closes StreamWriter, deletes ini file
/// </summary>
~SchemaWriter()
{
if(sw.BaseStream != null)
sw.Close();
File.Delete(path + @"Schema.ini");
}
}