我用如下方法:把一个对象序列化到一个文件。
// Serialize the inO3WHeadBean
if (inO3WHeadBean != null)
{
writer = new StreamWriter(inO3WheadFile, false, Encoding.GetEncoding("SHIFT-JIS"));
ser = new XmlSerializer(inO3WHeadBean.GetType());
ser.Serialize(writer, inO3WHeadBean);
writer.Close();
}但当重复调用这个函数时,提示文件inO3WheadFile被另一个进程使用,我现在如何确切的知道是哪个进程使用?(我通过捕获异常无法知道确切的是哪个进程正在使用)或者如果我能强制地关闭其他进程的访问也可以,这个如何实现?高人指点一下
// Serialize the inO3WHeadBean
if (inO3WHeadBean != null)
{
writer = new StreamWriter(inO3WheadFile, false, Encoding.GetEncoding("SHIFT-JIS"));
ser = new XmlSerializer(inO3WHeadBean.GetType());
ser.Serialize(writer, inO3WHeadBean);
writer.Close();
}但当重复调用这个函数时,提示文件inO3WheadFile被另一个进程使用,我现在如何确切的知道是哪个进程使用?(我通过捕获异常无法知道确切的是哪个进程正在使用)或者如果我能强制地关闭其他进程的访问也可以,这个如何实现?高人指点一下
// Serialize the inO3WHeadBean
// 保证文件不会被长期占用
if (inO3WHeadBean != null)
{
try{
writer = new StreamWriter(inO3WheadFile, false, Encoding.GetEncoding("SHIFT-JIS"));
ser = new XmlSerializer(inO3WHeadBean.GetType());
ser.Serialize(writer, inO3WHeadBean);
}
finally{
writer.Close();
}
}找不到是哪个进程的话,重启计算机,就好了...
感觉不是这句‘writer.Close();'的原因。
{
writer = new StreamWriter(inO3WheadFile, false, Encoding.GetEncoding("SHIFT-JIS"));
ser = new XmlSerializer(inO3WHeadBean.GetType());
ser.Serialize(writer, inO3WHeadBean);
writer.Close();
}
和
if (inO3WHeadBean != null)
{
try{
writer = new StreamWriter(inO3WheadFile, false, Encoding.GetEncoding("SHIFT-JIS"));
ser = new XmlSerializer(inO3WHeadBean.GetType());
ser.Serialize(writer, inO3WHeadBean);
}
finally{
writer.Close();
}
}
有区别吗?