client.DownloadFile() не закрывает файл

я пытаюсь скачать файл с помощью client.DownloadFile(), однако что бы я не делал, данный файл не закрывается.

using (WebClient client = new WebClient())
{
    client.DownloadFile(link, $"tempImage.jpg");
    client.Dispose();
}
File.Delete("tempImage.jpg");//Ошибка: файл используется другим процессом

Использую .Net Core 3.1. Заранее спасибо


Ответы (1 шт):

Автор решения: aepot

WebClient является устаревшим классом

Используйте HttpClient, работает это примерно так:

private static readonly HttpClient client = new HttpClient();

static async Task Main(string[] args)
{
    string link = "https://link";
    string path = "tempImage.jpg";
    await DownloadFileAsync(link, path);
    File.Delete(path);
}

static async Task DownloadFileAsync(string link, string path)
{
    using var stream = await client.GetStreamAsync(link);
    using var fs = File.Create(path);
    await stream.CopyToAsync(fs);
}

Что касается того что файл не закрывается, то этого по факту не может быть, так как судя по всем исходникам и логике, файл должен быть закрыт. В вашем коде из ненормального только лишний вызов Dispose(). То есть проблема за пределами показанного кода. Про антивирус в комментах вполне правдивая история.

Кстати, в .NET Core WebClient использует тот же HttpClient внутри себя.

→ Ссылка