2017-10-09 108 views
0

我有一個http url,我可以從中列出目錄,並且我擁有HTTP目錄的所有權限。 (Winform應用程序)如何從C#中的httpwebrequest獲取文件夾大小(Winform)

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http:///abc/def/);     request.Credentials = new NetworkCredential("username","password"); 

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
    { 
    string html = reader.ReadToEnd(); 
    long FolderSize = response.ContentLength; 
    } 
} 

我得到611作爲內容長度。但我想獲得文件存在的文件夾大小。請幫忙。

+0

'http:/// abc/def /'返回什麼?你從那個網址得到什麼?因爲如果它不是爲了提供您需要的信息而設計的,那麼您必須對其進行修改或詢問相關的開發人員。 –

+0

除非URL提供您可以解析的目錄列表,否則我不會看到這是如何工作的。提供的內容長度是文檔的長度,而不是目錄的大小。 – john

+0

@JohnEphraimTugado它返回該網址中的所有文件和文件夾(以html格式) – hustlecoder

回答

0

@JohnEphraimTugado我不能提供確切的內容,但它是有鏈接到URL中的所有文件夾的HTML格式 - hustlecoder

你說,它僅包含鏈接。所以鑑於你從http:///abc/def/得到的迴應,你不會得到你需要的信息。

如果您有權訪問上述文件夾,假設您有路徑,那麼您可以計算該目錄內每個文件的文件大小。

參見What's the best way to calculate the size of a directory in .NET?

protected static float CalculateFolderSize(string folder) 
{ 
    float folderSize = 0.0f; 

    try 
    { 
     //Checks if the path is valid or not 
     if (!Directory.Exists(folder)) 
      return folderSize; 
     else 
     { 
      try 
      { 
       foreach (string file in Directory.GetFiles(folder)) 
       { 
        if (File.Exists(file)) 
        { 
         FileInfo finfo = new FileInfo(file); 
         folderSize += finfo.Length; 
        } 
       } 

       foreach (string dir in Directory.GetDirectories(folder)) 
        folderSize += CalculateFolderSize(dir); 
      } 
      catch (NotSupportedException e) 
      { 
       Console.WriteLine("Unable to calculate folder size: {0}", e.Message); 
      } 
     } 
    } 
    catch (UnauthorizedAccessException e) 
    { 
     Console.WriteLine("Unable to calculate folder size: {0}", e.Message); 
    } 

    return folderSize; 
} 
+0

這不起作用。 OP詢問如何獲取HTTP服務器上目錄的目錄大小。 – CodingYoshi

+0

@CodingYoshi如果你真的閱讀我的答案我說:**所以給你從http:/// abc/def /得到的迴應,你將不會得到你需要的信息。** –

+0

實際上它是可能的按照OP的要求來做。看到我發佈到他的問題的評論,並看到鏈接。 – CodingYoshi

0

這不會像你想象的那麼容易。

  1. 「文件夾」(又名目錄)沒有「大小」,他們只有內容。
  2. 如果考慮到所有的子目錄,那麼這個內容很可能是巨大的
  3. 在這種情況下,您通過HTTP獲得的響應旨在被人類而不是機器(您的代碼)渲染爲紅色。
  4. 即使本地(在您的硬盤上),計算目錄的「大小」可能需要幾分鐘的時間。如果通過HTTP完成,則可能需要幾個小時甚至幾天(步驟2)。

如果你只在頂層(無子目錄)的內容感興趣,知道它是合理的,可以相當容易實現:

那些611(字節)的內容長度你得到的是服務器回答的HTML代碼長度爲。你需要做的是要求HTML代碼本身(通過執行一個標準的HTTP請求)。 一旦你有HTML代碼,你需要解析它(最好使用正則表達式)。通常,返回的HTML代碼不僅包含文件名列表,還包含它們的大小(以字節爲單位),只要您有一個能夠解析這些數字的正則表達式,就已經設置好了。

+0

它是一個IIS服務器。是否有可能獲得目錄大小? – hustlecoder