用于估算文件夹大小的 C# 程序
简介
在本文中,我们将了解用于估算文件夹大小的 C# 程序。在我们的 PC 上,我们将文件存储在一个称为文件夹的目录中。我们还将了解如何估算文件内的文件夹的大小。仅计算文件大小不足以达到我们的目标。相反,我们还需要计算文件夹和子文件夹的大小。
下面的文章将分三部分解释如何计算文件夹的大小。我们将了解的第一部分是 GetFolderSize 方法,它将为我们提供文件夹的大小。第二部分是 FormatBytes 方法,它将大小转换为人类可读的格式。我们还将简要了解不同的方法,这些方法对于本文的后续内容至关重要。
方法
我们将学习在代码中用于计算文件夹大小的五种方法。
DirectoryInfo(dir_path) − 此方法将目录路径作为输入参数,并返回其信息,例如有关其文件、子文件夹和子目录的信息。
GetFiles() − 它返回单个目录中所有文件的名称。
长度 − 它以字节为单位返回文件的大小。
GetDirectories() − 此方法在我们的代码中非常有用,因为它返回单个文件的所有文件夹、子文件夹和子目录。
除了这些将直接在我们的代码中使用的方法之外,还有一个方法对于输出控制台也很重要。
FormatBytes() − length 方法取出的大小以字节为单位,并且不是人类可读的格式,因此要将其转换为正确的字符串格式,我们需要使用 FormatBytes 方法进行转换。此方法以字节为输入,并根据需要将其转换为 MB 或 KB,然后四舍五入到小数点后两位并将其转换为字符串。
我们还将了解 DirectoryInfo 类的工作原理及其在我们的代码中的用途。
它允许对文件或目录执行多项操作。可以使用此类创建、移动和删除文件。它属于 System.Io 命名空间。它甚至提供处理文件的方法。
算法
步骤 1 − 我们必须先将所有文件放在一个地方。这里我们将所有文件存储在 all files 变量中。
步骤 2 − 现在我们将通过循环迭代并通过 Length 方法计算每个文件的长度来移动到所有文件。
步骤 3 − 现在我们必须确保没有遗漏文件内的子目录、子文件夹和文件夹。
步骤4 − 我们递归地移动到每个文件并检查它是否包含任何子目录、子文件夹或文件夹。
步骤 5 − 现在我们将计算每个文件的长度,并将其存储在总文件夹大小变量中。
步骤 6 − 现在我们必须确保使用格式字节方法将最终答案转换为人类可读的格式,将其从字节大小转换为字符串格式。
步骤 7 − 最后,我们可以使用控制台函数打印答案。
示例
using System;
using System.IO;
Class Tutorials_point{
// Driver code
static public void Main() {
DirectoryInfo folder = new DirectoryInfo("D://d2c articles");
//这里我们获取完整的文件夹信息。
//这是一个用于获取有关目录的完整信息的类。
long totalFolderSize = folderSize(folder);
//这里调用了 folderSize,我们将答案存储在 totalFolderSize 变量中。
long ans= FormatBytes(totalFolderSize);
//这里我们通过调用 FormatBytes 函数将字节大小格式化为可读格式。
Console.WriteLine("文件夹总大小(字节): " + ans);
//打印最终的答案。
}
static long folderSize(DirectoryInfo folder) {
long totalSizeOfDir = 0;
// 将所有文件放入目录中
FileInfo[] allFiles = folder.GetFiles();
// 循环遍历每个文件并获取其大小
foreach (FileInfo file in allFiles) {
totalSizeOfDir += file.Length;
// 我们在这里计算长度。
}
DirectoryInfo[] subFolders = folder.GetDirectories();
// 在这里我们查找文件中是否存在任何子文件夹或目录。
foreach (DirectoryInfo dir in subFolders) {
totalSizeOfDir += folderSize(dir);
// 在这里我们递归调用以检查所有子文件夹。
}
return totalSizeOfDir;
// 我们在这里返回总大小。
}
}
public static string FormatBytes(long bytes) {
/*此方法主要用于确定文件的大小。它首先确定我们是否必须以字节、KB、MB 或 GB 为单位完成。如果大小介于 1KB 和 1MB 之间,则我们将以 KB 为单位计算大小。同样,如果大小介于 MB 和 GB 之间,则我们将以 MB 为单位计算。*/
string[] sizes = { "bytes", "KB", "MB", "GB", "TB" };
//这里我们将所有大小存储在 sizes 字符串中。
int order = 0;
//我们已将 order 初始化为零,以便它不会返回一些垃圾值。
while (bytes >= 1024 && order < sizes.Length - 1) {
order++;
bytes /= 1024;
}
return $"{bytes:0.##} {sizes[order]}";
}
输出
Total folder size in bytes:850757
时间复杂度
在上面给出的代码中,我们看到我们迭代的唯一循环是递归循环。在该递归循环中,我们看到我们只迭代到所有子文件夹、文件、目录、子目录和文件夹。因此,时间复杂度为 O(文件大小)。除此之外,所有其他方法都只占用恒定的时间复杂度。在 Big-O 符号中,时间复杂度为 O(1)。因此,最终的时间复杂度只是文件夹的总大小。
结论
在本文中,我们广泛讨论了如何计算文件夹的大小。我们了解了代码中使用的不同方法和类。我们还了解到,仅通过计算文件大小无法得出结论。我们还必须确保计算所有文件夹、目录、子目录和子文件夹的大小。我们还了解了代码的算法、代码本身以及时间复杂度。我们希望本文有助于增强您对 C# 的了解。

