该进程无法访问该文件,因为该文件正由另一个进程使用

Cra*_*gly 15 c# asp.net

我从SQL Server数据库字段获取二进制数据,并在我的应用程序具有权限的目录中本地创建文档.但是我仍然得到标题中指定的错误.我已尝试在网上发布了许多建议,包括在Stackoverflow上的帖子中提出的建议.我还使用了ProcessExplorer> Find Handle来找到锁,它没有返回任何内容,好像文件没有被锁定一样.

我使用下面的代码将文件保存到文件系统,然后我尝试在另一个方法的应用程序进程中将此文件复制到新位置.正是这种复制方法采用了抛出异常的新创建文件的路径.

文件本身是用它的内容创建的,我可以通过Windows资源管理器打开它,没有任何问题.

我错过了一些完全明显的东西吗 我是否正确地从数据库创建文件?任何有关解决或更好地诊断问题的帮助将非常感激.

// Get file from DB
FileStream fs = new FileStream(
    "C:\myTempDirectory\myFile.doc", FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter br = new BinaryWriter(fs);
br.Write("BinaryDataFromDB");
fs.Flush();
fs.Close();
fs.Dispose();

// Copy file
File.Copy(sourceFileName, destinationFilename, true);
Run Code Online (Sandbox Code Playgroud)

Jes*_*alm 29

GC.Collect()在处理完流之后尝试添加一个调用来强制垃圾收集器清理.

// Get file from DB 
using(FileStream fs = new FileStream("C:\myTempDirectory\myFile.doc", FileMode.OpenOrCreate, FileAccess.Write)) 
using(BinaryWriter br = new BinaryWriter(fs))
{
   br.Write("BinaryDataFromDB"); 
   fs.Flush(); 
}

//Force clean up
GC.Collect();

// Copy file 
File.Copy(sourceFileName, destinationFilename, true); 
Run Code Online (Sandbox Code Playgroud)

  • 有人可以解释为什么在Dispose()中没有立即关闭流吗? (12认同)
  • GC.Collect()=>那是邪恶的! (5认同)