WebClient.如果该文件已经存在于磁盘上,则覆盖该文件

本文关键字:文件 磁盘 覆盖 于磁盘 如果 存在 WebClient | 更新日期: 2023-09-27 17:53:52

我找不到任何关于我的问题的信息。请原谅,如果我的搜索努力还不够好,没有找到答案。我只是不想白费力气。

谢谢!

跟进:如果它不覆盖,我怎么能让它(如果可能的话)?

WebClient.如果该文件已经存在于磁盘上,则覆盖该文件

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被覆盖,如果再次下载

WebClient类显然是为了抑制大量的细节和控制而设计的。您可以编写自己的方法来非常轻松地异步下载文件,并控制将下载的数据写入磁盘的方式。

我知道这个解决方案在codeproject中包含一个类,它使用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的手段,但有些下载可能是耗时的,并没有说,用户在下载期间没有创建另一个文件。

如果文件存在,则为存在

如果你要重命名它,或者如果你把它钩到OpenFileDialogue(),那是你的自由选择。