如果文件已存在于磁盘上,WebClient.DownloadFileAsync是否会覆盖该文件?

时间:2013-01-15 21:20:03

标签: c# asynchronous webclient-download

我无法找到有关我的问题的任何信息。如果我的搜索工作不够好,无法找到答案,请原谅。我只是想避免旋转我的车轮。

谢谢!

跟进:如果没有覆盖,我该怎么办?(如果可能的话)?

3 个答案:

答案 0 :(得分:27)

30秒测试确认它会覆盖

测试:

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会被覆盖

答案 1 :(得分:2)

WebClient类显然旨在抑制大量细节和控制。您可以编写自己的方法来非常轻松地异步下载文件,并控制下载数据如何写入光盘。

我确信codeProject上的this solution包含一个使用WebRequestWebResponse下载文件的类,它允许更多控制。请参阅包含名为webdata的类。你也需要注意的代码:

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

FileMode Enumeration包含一系列成员,指示保存文件的行为FileMode.CreateNew如果文件已存在则会抛出IOException。如果可能,FileMode.Create将覆盖文件。

如果你坚持使用WebClient.DownloadFileAsync那么,正如其他人已经提到的那样:你可以告诉用户现有文件将被OpenFileDialog覆盖,但有些下载可以是耗费时间,没有什么可说的,用户在下载过程中没有创建另一个文件。

答案 2 :(得分:0)

如果文件存在,是的。

如果您正在重命名,或者如果您将其重新加入OpenFileDialogue(),则由您自行决定。