StreamWriter即使包含在Using子句中,也不会释放对文件的锁定

本文关键字:释放 文件 锁定 包含 Using 子句 StreamWriter | 更新日期: 2023-09-27 18:29:55

I使用C#.Net代码将包含xml数据的文件复制到linux服务器上的某个位置。复制文件后不久,我会调用第三方(java应用程序)web服务,该服务试图使用复制的文件。第三方服务首先尝试重命名文件,在此过程中出现问题-Java file.renameTo方法返回false。这表明该文件仍在被其他进程使用/打开。

流写入代码在下面给出

using (StreamWriter file = new StreamWriter(filename)
{
    file.WriteLine(xml);
    file.Close();
}
// Code that calls the web service follows

被复制的文件可能很大(在某些情况下为20-30 MB)。在我调用第三方服务之前,我们是否可以完全确认文件已完全复制到该位置,并且没有进程保留该文件。我确信除了复制文件的过程之外,没有其他过程在等待。

StreamWriter即使包含在Using子句中,也不会释放对文件的锁定

尝试执行

file.Close(); file.Dispose();

这对我有用。

试着用其他方式命名文件,比如给它一个使用者不会读取的不同扩展名。关闭文件后,将文件名更改为它应该是的任何文件名,允许java代码获取文件并执行它需要执行的操作。

尝试在file.Close(); 之前添加一个显式file.Flush();