我从SQL Server数据库字段获取二进制数据,并在我的应用程序有权限的目录中本地创建文档。然而,我仍然得到标题中指定的错误。我尝试了许多网上发布的建议,包括Stackoverflow上之前的帖子中提出的建议。我还使用了ProcessExplorer > Find Handle来定位锁,它没有返回任何内容,就好像文件没有被锁定一样。
我使用下面的代码将文件保存到文件系统,然后尝试在稍后的应用程序过程中使用另一种方法将该文件复制到新位置。此copy方法采用抛出异常的新创建文件的路径。
文件本身是用它的内容创建的,我可以通过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);
发布于 2010-02-09 06:20:38
在处理完流之后,尝试添加对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);
发布于 2010-02-09 06:10:36
如下所示更改您的代码,问题是当您需要文件流时,它不会被垃圾收集:
// Get file from DB
using (FileStream fs = new FileStream("C:\myTempDirectory\myFile.doc", FileMode.OpenOrCreate, FileAccess.Write))
{
BinaryWriter br = new BinaryWriter(fs);
br.Write("BinaryDataFromDB");
fs.Flush();
fs.Close();
}
// Copy file
File.Copy(sourceFileName, destinationFilename, true);
发布于 2010-02-09 05:51:49
是不是文件流和BinaryWriter不能同时使用?例如,在同一文件上不能同时调用流编写器和流阅读器。然而,这是没有意义的,据我所知,在这种情况下是不应该的。也许也可以试着关闭br?
https://stackoverflow.com/questions/2225087
复制相似问题