获取远程目录的文件夹大小

本文关键字:文件夹 程目录 获取 | 更新日期: 2023-09-27 18:14:12

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

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;
}

我不太擅长PInvoke,对c#还是很新的。我看到Kernel32.dll有一些对文件和磁盘的调用,但找不到任何关于文件夹或目录的信息。

所以问题是

  1. c#中是否有API/函数可以通过网络获取目录的大小

  2. 是否有一个PInvoke调用可以用来做这个

  3. 最好的方法是什么?

获取远程目录的文件夹大小

使用DirectoryFileInfo

代码示例和更多信息可以在这里找到:

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;
}

对于网络共享,您的方法是正确的,因为您无法通过任何"更快"的方法访问底层文件系统。但是您的代码有一些问题,下面显示了基本问题:

    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();

还要注意,这将只返回文件夹中文件的大小,而不是任何子文件夹。对于这一点,我想看看递归。