.net 使用FluentFTP获取FTP文件夹大小

4xrmg8kj  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(393)

我想在/ path中列出所有文件夹的名称和大小。在我的例子中,在'/ path中有两个文件夹。

  1. XYZ(12 MB)
  2. ABC(10 MB)
    我想使用FluentFTP来获得名称和大小,以便用blazor实现。
    我使用BabyFTP作为测试FTP服务器。
    我所做是
private void GetFileSize()
{
    using (var conn = new FtpClient("127.0.0.1"))
    {
        conn.Connect();

        foreach (FtpListItem item in conn.GetListing("/"))
        {
            Console.WriteLine(item.Name);
            Console.WriteLine(item.Size);
        }
        conn.Disconnect();
    }
}

但是我得到的Name是正确的,但是我得到的Size0。如何得到每个文件夹的大小?

s5a0g9ez

s5a0g9ez1#

目录列表中的(子)目录项没有大小。在任何地方,只需检查Windows dir命令或unix ls命令。
你必须递归地计算所有包含的文件的大小。

ulong GetDirectorySize(FtpClient client, string path)
{
    ulong result = 0;
    foreach (var entry in client.GetListing(path))
    {
        if (entry.Type == FtpObjectType.File)
        {
            result += (ulong)entry.Size;
        }
        else if (entry.Type == FtpObjectType.Directory)
        {
            result += GetDirectorySize(client, entry.FullName);
        }
    }
    return result;
}

相关问题