WebClient.DownloadFile 的莫名行为

Inexplicable behavior of WebClient.DownloadFile

在我的控制台应用程序中,我正在从给定的 URL 下载一个 .xlsx 文件。如果我将下载路径设置为 "C:\Temp\Test.xlsx",下载将按预期进行,我可以在 Excel 中打开文件。但是,如果我将路径设置为 "C:\SomeFolder\SomeSubfolder\Test.xlsx",我会在指定位置得到一个名为 'Test.xlsx' 的文件夹。

这是我下载文件的代码:

public void DownloadFile(string sourceUrl, string targetPath
{
    try
    {
        CreateDirectoryIfNotExists(targetPath);

        using (WebClient webClient = new WebClient())
        {
            webClient.UseDefaultCredentials = true;
            webClient.DownloadFile(sourceUrl, targetPath);
        }
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
        Console.Write(e);
        Console.ReadLine();
    }
}

这里是我创建目录的方法,如果它还不存在的话:

private void CreateDirectoryIfNotExists(string targetPath)
{
    if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(targetPath)))
    {
        System.IO.Directory.CreateDirectory(targetPath);
    }
}

targetPath 设置为 "C:\Temp\Test.xlsx" 的结果:

targetPath 设置为 "C:\SomeFolder\SomeSubfolder\Test.xlsx" 的结果:

为什么我的文件被保存为文件夹而不是文件?

感谢任何帮助。

您正在从目标路径创建目录。更改此行

System.IO.Directory.CreateDirectory(targetPath);

System.IO.Directory.CreateDirectory(new System.IO.FileInfo(targetPath).DirectoryName));