如何从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作为内容长度。但我想获得文件存在的文件夹大小。请帮忙。
@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;
}
这不起作用。 OP询问如何获取HTTP服务器上目录的目录大小。 – CodingYoshi
@CodingYoshi如果你真的阅读我的答案我说:**所以给你从http:/// abc/def /得到的回应,你将不会得到你需要的信息。** –
实际上它是可能的按照OP的要求来做。看到我发布到他的问题的评论,并看到链接。 – CodingYoshi
这不会像你想象的那么容易。
- “文件夹”(又名目录)没有“大小”,他们只有内容。
- 如果考虑到所有的子目录,那么这个内容很可能是巨大的。
- 在这种情况下,您通过HTTP获得的响应旨在被人类而不是机器(您的代码)渲染为红色。
- 即使本地(在您的硬盘上),计算目录的“大小”可能需要几分钟的时间。如果通过HTTP完成,则可能需要几个小时甚至几天(步骤2)。
如果你只在顶层(无子目录)的内容感兴趣,知道它是合理的,可以相当容易实现:
那些611(字节)的内容长度你得到的是服务器回答的HTML代码长度为。你需要做的是要求HTML代码本身(通过执行一个标准的HTTP请求)。 一旦你有HTML代码,你需要解析它(最好使用正则表达式)。通常,返回的HTML代码不仅包含文件名列表,还包含它们的大小(以字节为单位),只要您有一个能够解析这些数字的正则表达式,就已经设置好了。
它是一个IIS服务器。是否有可能获得目录大小? – hustlecoder
'http:/// abc/def /'返回什么?你从那个网址得到什么?因为如果它不是为了提供您需要的信息而设计的,那么您必须对其进行修改或询问相关的开发人员。 –
除非URL提供您可以解析的目录列表,否则我不会看到这是如何工作的。提供的内容长度是文档的长度,而不是目录的大小。 – john
@JohnEphraimTugado它返回该网址中的所有文件和文件夹(以html格式) – hustlecoder