В то время как ответ Стивенса совершенно верен, это может быть иногда непрактично. Я предположил бы создать временное имя файла (что не так отличается от того, что предложил Стивен, но во временной папке, скорее всего, AppData/Local/Temp) и переименовать файл после завершения загрузки. Этот класс демонстрирует эту идею, и я не проверял, что он работает по назначению, но если он не хочет использовать сам класс.
class CopyDownloader
{
public string RemoteFileUrl { get; set; }
public string LocalFileName { get; set; }
WebClient webClient = new WebClient();
public CopyDownloader()
{
webClient.DownloadFileCompleted += WebClientOnDownloadFileCompleted;
}
public void StartDownload()
{
var tempFileName = Path.GetTempFileName();
webClient.DownloadFile(RemoteFileUrl, tempFileName, tempFileName)
}
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs)
{
string tempFileName = asyncCompletedEventArgs.UserState as string;
File.Copy(tempFileName, GetUniqueFileName());
}
private string GetUniqueFilename()
{
// Create an unused filename based on your original local filename or the remote filename
}
}
Если вы хотите, чтобы отобразить прогресс, которого вы могли бы выставить событие, которое испускается при WebClient.DownloadProgressChanged
брошено
class CopyDownloader
{
public event DownloadProgressChangedEventHandler ProgressChanged;
private void WebClientOnDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs downloadProgressChangedEventArgs)
{
if(ProgressChanged != null)
{
ProgressChanged(this, downloadProgressChangedEventArgs);
}
}
public CopyDownloader()
{
webClient.DownloadFileCompleted += WebClientOnDownloadFileCompleted;
webClient.DownloadProgressChanged += WebClientOnDownloadProgressChanged;
}
// ...
}
Вы экономите его с тем же именем в том же месте, которое заменит это каждый раз. Просто используйте другое имя. –
Перед тем, как скачать его, проверьте, существует ли он. Если он не загружает его. Если он делает что-то другое (используйте другое имя) – MarshallOfSound
Мои извинения, я забыл об этом. –