如何从C#中的httpwebrequest获取文件夹大小(Winform)

问题描述:

我有一个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

@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

这不会像你想象的那么容易。

  1. “文件夹”(又名目录)没有“大小”,他们只有内容。
  2. 如果考虑到所有的子目录,那么这个内容很可能是巨大的
  3. 在这种情况下,您通过HTTP获得的响应旨在被人类而不是机器(您的代码)渲染为红色。
  4. 即使本地(在您的硬盘上),计算目录的“大小”可能需要几分钟的时间。如果通过HTTP完成,则可能需要几个小时甚至几天(步骤2)。

如果你只在顶层(无子目录)的内容感兴趣,知道它是合理的,可以相当容易实现:

那些611(字节)的内容长度你得到的是服务器回答的HTML代码长度为。你需要做的是要求HTML代码本身(通过执行一个标准的HTTP请求)。 一旦你有HTML代码,你需要解析它(最好使用正则表达式)。通常,返回的HTML代码不仅包含文件名列表,还包含它们的大小(以字节为单位),只要您有一个能够解析这些数字的正则表达式,就已经设置好了。

+0

它是一个IIS服务器。是否有可能获得目录大小? – hustlecoder