【问题标题】:Get Folder Size of remote directory [duplicate]获取远程目录的文件夹大小[重复]
【发布时间】:2014-07-23 07:03:19
【问题描述】:

要求:在合理的时间范围内获取文件夹或远程计算机的大小。

WMI 枚举目录并计算其内容大小的时间太长。

我尝试了以下代码,但它说它不是有效的路径

String Folder = Row["Location"].ToString();
String[] Files = Directory.GetFiles(@"\\" + Folder.Remove(0, 2) + @"\c$" + Folder, "*", SearchOption.AllDirectories);
long TotalFolderSize = 0;
foreach (String File in Files)
{
    TotalFolderSize += new FileInfo(File).Length;
}

我对@9​​87654323@ 并没有那么好,对 C# 来说还是很陌生。我看到Kernel32.dll 有一些文件和磁盘调用,但找不到有关文件夹或目录的任何信息。

所以问题是

  1. C# 中是否有 API/Function 可以通过网络获取目录的大小。

  2. 是否有可用于执行此操作的 PInvoke 调用

  3. 最好的方法是什么?

【问题讨论】:

  • tbh 对于网络共享,您的方法是正确的(获取一个文件夹并遍历文件)。我不确定您在第二行尝试什么,但我会移动该字符串操作并将其放入单独的变量中。
  • 正如@AbdulMajid 指出的,这个问题已经在一段时间前被问到了——并且没有什么真正的新东西可用(对于本地/远程目录)。请务必阅读有关链接问题中“文件/文件夹大小”陷阱的长答案。
  • 据我从我们公司的网络中得知,代码本身可以工作。可能是文件夹路径格式错误? Row["Location"]的具体内容是什么?

标签: c# io directory


【解决方案1】:

使用DirectoryFileInfo 类。

代码示例和更多信息可以找到here:

static long GetDirectorySize(string p)
{
    // 1.
    // Get array of all file names.
    string[] a = Directory.GetFiles(p, "*", SearchOption.AllDirectories);

    // 2.
    // Calculate total bytes of all files in a loop.
    long b = 0;
    foreach (string name in a)
    {
        // 3.
        // Use FileInfo to get length of each file.
        FileInfo info = new FileInfo(name);
        b += info.Length;
    }

    // 4.
    // Return total size
    return b;
}

【讨论】:

    【解决方案2】:

    对于网络共享,您的方法是正确的,因为您无权访问任何“更快”方法的底层文件系统。但是您的代码存在一些问题,以下显示了基础知识:

        string networkPath = @"\\sgb8532fh92\AppData\PCUWEB";
    
        DirectoryInfo di = new DirectoryInfo(networkPath);
        long totalSize = 0;
    
        foreach (FileInfo fi in di.GetFiles())
        {
            totalSize += fi.Length;
        }
    
        Console.WriteLine("Total Size: {0}Mb", totalSize / 1024 / 1024);
        Console.ReadLine();
    

    另请注意,这只会返回文件夹中文件的大小,而不是任何子文件夹。为此,我会考虑递归。

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2011-08-22
      • 2013-08-07
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多