首页 > 解决方案 > 在多线程应用程序中创建文件时出现异常 - “文件正在被另一个进程使用”

问题描述

我在 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方法每次都会被不同的线程调用。

标签: c#multithreadingfileconcurrencydownload

解决方案


推荐阅读