Исключение WebClient при копировании файла
Я хочу "скачать" файл (больше похоже на его копирование из одного места в другое), чтобы найти лучший способ сделать это. Я дошел до попытки xcopy и т. Д. Теперь я пробую WebClient. У меня есть код, изложенный ниже:
WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
foreach (string drivePath in _destRepository.Destinations)
{
do
{
AsyncItem job = _repository.GetNextAsyncItem();
string source = job.DownloadLocation;
string destination = drivePath + job.Destination;
client.DownloadFileAsync(new Uri(source), destination);
} while (_repository.QueueCount < 1);
}
AsyncItem - это просто пользовательский класс, содержащий исходное и относительное назначение (назначение без расположения на диске). Затем будет указан путь к диску, а затем клиент покажет DownloadFileAsync. Однако в функции Event Completed я получаю сообщение об ошибке. InnerException говорит мне, что пункт назначения не существует?
Ну, конечно, его пока нет, WebClient должен это сделать. Это заставило меня поверить, что, возможно, WebClient не создает структуры папок? Некоторые из этих файлов находятся на двух уровнях.
Каково мнение Stackru?
Благодарю.
1 ответ
Ответ простой: да, WebClient не создает структуры папок для вас. Они должны быть добавлены следующим образом:
FileInfo dest = new FileInfo(destination);
if (!dest.Directory.Exists)
dest.Directory.Create();
Но, во-вторых, и самое главное, WebClient не поддерживает операции ввода-вывода CONCURRENT.