Файл используется после загрузки WebClient - PullRequest
0 голосов
/ 08 сентября 2018

После этого я скачал файл и попытался удалить его в зависимости от его размера, однако он говорит, что файл используется.

WebClient wc = new WebClient();

wc.DownloadFileAsync(new Uri(sb.ToString()), sbFileLocation.ToString());

 if (new FileInfo(sbFileLocation.ToString()).Length == 0)
            {
                File.Delete(sbFileLocation.ToString());
            }

Как видите, File.Delete вызывает исключение, сообщая, что файл используется.

Есть ли способ закрыть его, а затем удалить?

1 Ответ

0 голосов
/ 08 сентября 2018

DownloadFileAsync (Uri, String, Object)

Скачивает в локальный файл ресурс с указанным URI. это Метод не блокирует вызывающий поток.

Это означает, что файл может (или не может) быть полностью загружен до того, как вы позвоните File.Delete(sbFileLocation.ToString());. Это типичное состояние гонки и полностью объясняет вашу ошибку.

Этот метод загружает ресурс по URI, указанному в параметр адреса. После успешного завершения загрузки скачанный файл называется fileName на локальном компьютере. Файл загружается асинхронно с использованием потоковых ресурсов, которые автоматически выделяется из пула потоков. получить уведомить о доступности файла, добавить обработчик событий в Событие DownloadFileCompleted.

Вам либо нужно использовать событие DownloadFileCompleted, синхронный метод WebClient.DownloadFile или await метод, основанный на задачах WebClient.DownloadFileTaskAsync

...