2013-01-15 14 views
6

Nie mogę znaleźć żadnych informacji na moje pytanie. Proszę wybaczyć, jeśli moje poszukiwania nie były wystarczająco dobre, aby znaleźć odpowiedź. Po prostu chcę uniknąć obracania kół.Czy plik WebClient.DownloadFileAsync zastępuje plik, jeśli już istnieje na dysku?

Dzięki!

Kontynuacja: jeśli nie zostanie nadpisany, jak mogę go uzyskać (jeśli to możliwe)?

+0

Wygląda na to, że wystarczy po prostu spróbować i się przekonać. Jeśli nie; sprawdź plik o tej nazwie przed pobraniem i usuń go przed pobraniem. – Servy

+1

Wydaje się to dobrym pytaniem dla Google, jeśli mnie pytasz (co zrobiłeś!);] – plast1K

Odpowiedz

21

A 30 drugie badanie potwierdza, że ​​ma zastąpić

Test:

using (WebClient client = new WebClient()) 
{ 
    client.DownloadFileAsync(new Uri("http://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe"), @"C:\Test.exe"); 
} 

test.exe jest overwitten jeśli downlaoded ponownie

+0

Dziękuję. Doceniam pomoc. – Kashif

+7

Dzięki, właśnie ocaliłem 28 sekund. :-) –

+0

ja też ... ten szczegół nie był w dokumentach –

0

Jeśli plik istnieje, tak.

Jeśli zmieniasz nazwę lub masz połączenie z OpenFileDialogue(), to według własnego uznania.

2

Klasa WebClient jest oczywiście zaprojektowana do tłumienia wielu szczegółów i kontroli. Możesz napisać własną metodę asynchronicznego pobierania pliku bardzo łatwo i kontrolować sposób zapisywania pobranych danych na dysk.

Wiem na pewno, że this solution w codeproject zawiera klasę, która pobiera plik przy użyciu WebRequest i WebResponse, co pozwala na znacznie większą kontrolę. Zobacz klasę o nazwie o nazwie webdata. Kod może trzeba zwrócić uwagę też:

FileStream newFile = new FileStream(targetFolder + file, FileMode.Create); 
newFile.Write(downloadedData, 0, downloadedData.Length); 
newFile.Close(); 

FileMode Enumeration zawiera szereg elementów, które określają zachowanie zapisywania pliku FileMode.CreateNew wygeneruje IOException jeśli plik już istnieje. W miarę, jak FileMode.Create będzie nadpisywać pliki, jeśli to możliwe.

Jeśli nalegać na użyciu WebClient.DownloadFileAsync wtedy, jak inne chłopaki już wspomniałem: można po prostu poinformować użytkownika, że ​​istniejący plik zostanie zastąpiony za pomocą OpenFileDialog ale niektóre pliki do pobrania może być czasochłonne i nie ma nic do powiedzenia że użytkownik nie utworzył innego pliku podczas pobierania.

Powiązane problemy