2016-02-12 64 views
1

在我的控制檯應用程序中,我正在從給定的URL下載.xlsx文件。如果我將下載路徑設置爲「C:\ Temp \ Test.xlsx」,則下載按預期工作,我可以在Excel中打開該文件。但是,如果我將路徑設置爲「C:\ SomeFolder \ SomeSubfolder \ Test.xlsx」,我會在指定位置得到名稱爲「Test.xlsx」的文件夾。WebClient.DownloadFile的令人費解的行爲

這裏就是我下載的文件中的代碼:

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」:

enter image description here

結果與targetPath設置爲 「C:\ SomeFolder \ SomeSubfolder \ Test.xlsx」:

enter image description here

有,爲什麼我的文件保存爲一個文件夾,而不是作爲一個文件的原因嗎?

任何幫助表示讚賞。

+0

什麼* *究竟是有問題的文件夾?如果將文件從'c:\ temp'複製到另一個文件夾,您看到了什麼? –

+2

粘貼你的所有代碼?您可能正在做其他事情,例如在某處調用Directory.CreateDirectory。 嘗試刪除「Test.xlsx」文件夾並再次運行您的程序。如果重新創建目錄是您的問題 – wal

回答

3

您正在從目標路徑創建目錄。這條線

System.IO.Directory.CreateDirectory(targetPath); 

更改爲

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

您是對的。我應該看到這一點。 –