我正在从 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/