c# - 在多线程应用程序中创建文件时出现异常 - “文件正在被另一个进程使用”
问题描述
我在 C# Windows 服务中使用以下代码来创建或覆盖现有文件。
function DonwnloadFile(string destinationfolder, string filename)
{
using (var outputFileStream = System.IO.File.Create(
destinationfolder + "\\" + filename, BUFFER_SIZE))
{
//Downloads a large file from cloud and writes it to the outputFileStream
//...
//...
}
}
在下载文件(非常大)时,DownloadFile
由于源文件已更新,因此会发出另一个方法请求。但是,抛出异常:
该进程无法访问文件“[带路径的文件名]”,因为它正被另一个进程使用。
如何实现解决方案,以便覆盖同一文件的后续请求等到同一文件的前一个文件写入操作完成。此外,该解决方案应允许覆盖不同文件的请求不应等待,因为它不会引发任何异常。
我可以在确保锁定仅基于文件名的情况下使用锁定吗?或者有人可以为这个问题提出一个更好的解决方案。
注意:DonwloadFile
方法每次都会被不同的线程调用。
解决方案
推荐阅读
- python - 如何在 Wagtail 中添加片段描述
- python - Python:处理多个独立异常
- typescript - 在对象打字稿上添加/重命名键
- bash - 如何在 scp 命令中使用文件名中的白色空白
- python - 如何将相同的过程应用于熊猫中的多个csv文件并将其保存在另一个目录中?
- java - 是否有模式注册表规范?
- azure-devops - 为什么天蓝色构建管道不为角度构建生成 dist 文件夹
- javascript - 将 JavaScript 导入 React
- python-3.x - 从 Txt 文件 Python 运行 SQL 查询
- qt - 如何使用 TAB 和 SHIFT+TAB 在 macOS 中的自定义 QML 控件上循环 activeFocus?