2017-05-07 49 views
0

假設我有一個下載URL,當你獲取它時,它會下載一個文件。 現在,這個文件不是txt或任何東西,它沒有擴展名。 我如何將GET請求編碼到URL,但將其下載到某個路徑? 編輯:另外,我將如何將其轉換爲TXT,然後從TXT讀取? 注意:這是一個獲取請求網站,即時下載文件,而不是在您可以在瀏覽器中打開的網站上的文件 編輯2:它實際上返回XML,而不是文件,對不起 只是使用瀏覽器下載它。(C#)如何獲取下載網址到某個路徑?

+0

的可能的複製[如何下載在C#中的URL文件?(http://stackoverflow.com/questions/307688/how-to-download-a-file-from-a-url -in-c) – theB

+0

不是,不是重複。該URL不需要WebClient.DownloadFile,它只需要GET請求。 – WebCodingFun

+0

@WebCodingFun我的回答有什麼問題?如果您喜歡,我會免費提供「如何將文件內容讀回內存」位。 –

回答

0

該文件的真實內容是什麼?

  1. 您可以嘗試將內容類型配置爲「application/octet-stream」。 它要求服務器輸入字節內容。

  2. 如果內容已經是常規文本,您可以簡單地將「.txt」添加到文件名,並且您可以隨時閱讀。

+0

內容爲XML,但下載後沒有擴展名。它會下載到瀏覽器的下載路徑中。 – WebCodingFun

+0

閱讀新的編輯 – WebCodingFun

0

你這樣做,它應該無關緊要,如果你的鏈接有一個明確的結局,就像我用過的那樣。或者如果你真的認真對待GET零件明確使用RestSharp。看看現在你甚至可以從代碼中改變文件擴展名,而不是最重要的。自從你提到你的文件是xml以來,我拋棄了一些Linq2Xml,我認爲你可能需要對它做些什麼。

using System; 
using System.Diagnostics; 
using System.IO; 
using System.Net.Http; 
using System.Xml.Linq; 
using System.Linq; 
using RestSharp; 

namespace Get2File 
{ 
    internal class Program 
    { 
     private const string FallbackUrl = @"https://gist.github.com/Rusk85/8d189cd35295cfbd272d8c2121110e38/raw/4885d9ba37528faab50d9307f76800e2e1121ea2/example-xml-with-embedded-html.xml"; 

     private string _downloadedContent = null; 

     private const string FileNameWithoutExtension = "File"; 

     private static void Main(string[] args) 
     { 
      var p = new Program(); 
      p.Get2FileWithRestSharp(fileExtensions:".xml"); 
      p.UseLinq2XmlOnFile(); 
     } 

     private void Get2File(string altUrl = null, string fileExtensions = ".txt") 
     { 
      var url = !string.IsNullOrEmpty(altUrl) 
       ? altUrl 
       : FallbackUrl; 
      var client = new HttpClient(); 
      var content = client.GetStringAsync(url).Result; 
      _downloadedContent = content; 
      var outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{FileNameWithoutExtension}{fileExtensions}"); 
      File.WriteAllText(outputPath, content); 
     } 

     private void Get2FileWithRestSharp(string altUrl = null, string fileExtensions = ".txt") 
     { 
      var url = !string.IsNullOrEmpty(altUrl) 
       ? altUrl 
       : FallbackUrl; 
      var urlAsUri = new Uri(url); 
      var client = new RestClient(urlAsUri); 
      var request = new RestRequest(Method.GET); 
      var content = string.Empty; 
      var result = client.Execute(request); 
      content = result.Content; 
      _downloadedContent = content; 
      var output = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{FileNameWithoutExtension}{fileExtensions}"); 
      File.WriteAllText(output, content); 
     } 


     private void UseLinq2XmlOnFile() 
     { 
      XElement xElement = XElement.Parse(_downloadedContent); 
      var elements = xElement.Elements(); 
      var StringElement = elements.FirstOrDefault(e => e.Name == "String"); 
      var tranlateXAttribute = StringElement.Attributes().FirstOrDefault(attr => attr.Name == "translate"); 
      Debug.WriteLine(tranlateXAttribute.Value); 
     } 
    } 
}