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

时间:2014-11-11 08:54:49

标签: c# streamwriter

我使用C#.Net代码将包含xml数据的文件复制到linux服务器上的某个位置。我复制文件后不久,我调用了第三方(Java app)网络服务,试图使用复制的文件。第三方服务首先尝试重命名该文件,并在此过程中遇到问题-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)。有没有办法我们可以完全确认文件已完全复制到该位置,并且在我调用第三方服务之前没有进程保留该文件。我确信除了复制文件之外没有其他进程。

3 个答案:

答案 0 :(得分:0)

尝试执行

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

这适合我。

答案 1 :(得分:-1)

尝试将文件命名为其他内容,例如为其提供消费者无法读取的不同扩展名。关闭文件后,将文件名更改为应该的文件名,允许java代码获取文件并执行它需要执行的操作。

答案 2 :(得分:-1)

尝试在file.Flush();

之前添加明确的file.Close();