c# - 使用(FileStream)创建临时文件导致 "The process cannot access the file because it is being used"

标签 c# filestream temporary-files

我正在从 SQL 服务器读取文件并将其临时写入磁盘,以便另一个程序可以访问它。使用 Path.GetTempFileName() 非常简单。

我的问题是我需要在该过程完成后删除这些临时文件。我正在使用 FileStream 类执行此操作,例如:

using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write,    FileShare.None, 8, FileOptions.DeleteOnClose))
{  
  //code here ultimately accessing the temp file
}

设置了 fileOptions 后,一旦 using 完成并释放 FileStream,文件就会被删除。该文件肯定是按提示创建和删除的,但是任何访问该文件的进程都会响应“该进程无法访问该文件,因为它正在被使用...”

如果我的 FileStream 仍然可以访问文件是可以理解的(我尝试修改 FileShare 但没有成功;这个其他进程不是文件流。)

我希望避免使用删除方法(这将需要更多错误捕获)。是否有一种简单的方法(利用 FileStream)创建我的临时文件并在其他进程完成后将其删除?

最佳答案

我在这里看不到 using 语句的可能性,但您可以使用 Process.WaitForExit() 方法等待其他进程结束,之后您可以安全地删除文件。

关于c# - 使用(FileStream)创建临时文件导致 "The process cannot access the file because it is being used",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4388850/

相关文章:

c# - C# WPF 项目中 Resources 文件夹中的 XML 文件到 FileStream 的路径

python - 刷新和 fsync 在临时文件中不起作用

python - Django TemporaryUploadedFile 不存在,但它被成功读取

c# - SetWindowsHookEx() 只注册一个本地钩子(Hook),而 DLL 被注入(inject)

c# - 从 xls 文件中选择行不为空的位置

c# - CSVReader 在最后一行最后一列抛出错误

java - 临时文件、单实例锁和进程终止 (Java)

c# - 如何使用友好名称而不是指纹获取 X509Certificate?

c# - .net core 和 .net framework 4.6 的 Nuget 包兼容性

C# - 嵌套的 using 语句是否多余?