c# - 该进程无法访问该文件,因为它正被另一个进程使用

标签 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);

最佳答案

在处理流以强制垃圾收集器清理后,尝试添加对 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); 

关于c# - 该进程无法访问该文件,因为它正被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2225087/

相关文章:

c# - 如何实现更独特的名称(MVC)

c# - 如何使用属性调用类上的方法?

c# - FFMPEG NReco.ConcatMedia 合并来自不同来源的文件

c# - 使用 FluentNHibernate NHibernate 3.3 的错误映射

c# - 应用程序仍然引用以前版本的程序集

c# - Appium 找不到 2/3 seekbar 的 ID 但都在同一页面上

ASP.NET MVC3 无法访问字体(静态内容)

c# - 使用 String.Format 构建正则表达式 : "Input string was not in a correct format"

c# - WebClient.DownloadString 不返回任何数据

asp.net - 在 JetBrains Rider 中的 IIS Express 服务器上运行多个项目