C# 程序估计文件夹的大小

c# 程序估计文件夹的大小

简介

在本文中,我们将了解估算文件夹大小的 C# 程序。在我们的电脑上,我们将文件存储在一个称为文件夹的目录中。我们还将了解如何估计文件中存在的文件夹的大小。仅计算文件大小不足以达到我们的目标。相反,我们还需要计算文件夹和子文件夹的大小。

下面的文章将分三部分来讲解如何计算文件夹的大小。我们要知道的第一部分是 GetFolderSize 方法,它将为我们提供文件夹的大小。第二部分是 FormatBytes 方法,它将大小转换为人类可读的格式。我们还将简要了解不同的方法,这对于本文的进一步发展至关重要。

方法

我们将学习将在代码中使用的五种方法来计算文件夹的大小。

DirectoryInfo(dir_path) – 此方法将目录路径作为输入参数并返回其信息,例如有关其文件、子文件夹和子目录的信息。

GetFiles() − 它返回单个目录中所有文件的名称。

长度− 它返回文件的大小(以字节为单位)。

GetDirectories() − 此方法将在我们的代码中发挥最大作用,因为它返回单个文件的所有文件夹、子文件夹和子目录。

除了这些将在我们的代码中直接使用的方法之外,考虑到输出控制台,还有一种重要的方法。

FormatBytes() − length 方法取出的大小以字节为单位,它不是人类可读的格式,因此要将其转换为正确的字符串格式,我们需要使用 FormatBytes 方法将其转换。该方法以字节为输入,根据需要将其转换为MB或KB,然后四舍五入到小数点后两位并转换为字符串。

我们还将了解 DirectoryInfo 类的工作原理及其在代码中的用途。

它允许对文件或目录执行多种操作。人们可以使用此类来创建、移动和删除文件。它位于 System.Io 命名空间下。它甚至提供了处理文件的方法。

算法

第 1 步 −我们必须首先将所有文件放在一个位置。这里我们将所有文件存储在 all files 变量中。

第 2 步 − 现在,我们将通过循环迭代并通过 Length 方法计算每个文件的长度来移动到所有文件。

第 3 步 − 现在我们必须确保不会留下文件中存在的子目录、子文件夹和文件夹。

第 4 步 −我们递归地移动到每个文件并检查其中是否包含任何子目录、子文件夹或文件夹。

第 5 步−我们现在将计算其中存在的每个文件长度,并将其存储在总文件夹大小变量中。

第 6 步 − 现在我们必须确保使用 format bytes 方法,以便将最终答案转换为人类可读的格式,将其从字节大小转换为字符串格式。

第 7 步 −最后,我们可以使用控制台功能打印答案。

示例

using System;using System.IO;Class Tutorials_point{   // Driver code   static public void Main() {      DirectoryInfo folder = new DirectoryInfo("D://d2c articles");            //Here we are getting the complete folder information.            //This is a class that is used to get complete information about directories.      long totalFolderSize = folderSize(folder);            //here folderSize is called and we are storing the answer            // in the totalFolderSize variable.      long ans= FormatBytes(totalFolderSize);            //here we are formatting the bytes size into a readable format by            //calling the FormatBytes function.      Console.WriteLine("Total folder size in bytes: " + ans);            //final ans is printed.   }   static long folderSize(DirectoryInfo folder) {      long totalSizeOfDir = 0;      // Get all files into the directory      FileInfo[] allFiles = folder.GetFiles();      // Loop through every file and get the size of it      foreach (FileInfo file in allFiles) {         totalSizeOfDir += file.Length;                  // we are calculating the length here.      }      DirectoryInfo[] subFolders = folder.GetDirectories();            //here we are finding if there are any subfolders or directories present inside a file.      foreach (DirectoryInfo dir in subFolders) {         totalSizeOfDir += folderSize(dir);                  //here we are recursively calling to check all the subfolders.      }      return totalSizeOfDir;            // we return the total size here.   }}public static string FormatBytes(long bytes) {   /*This method is basically used to determine the size of the file. It determines first whether we have to complete in bytes or KB or MB or GB. If the size is between 1KB and 1MB, then we will calculate the size in KB. Similarly, if it is between MB and GB, then we will calculate it in MB.*/   string[] sizes = { "bytes", "KB", "MB", "GB", "TB" };      //here we are storing all sizes in sizes string.   int order = 0;      // we have initialized the order with zero so that it does not give us some garbage value in return.   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# 的了解有所帮助。

以上就是C# 程序估计文件夹的大小的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1435224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 10:54:49
下一篇 2025年12月13日 09:58:20

相关推荐

  • C# 中的托管代码是什么?

    托管代码是由公共语言运行时(CLR)管理执行的代码。它获取托管代码并将其编译为机器代码。之后,代码被执行。 这里的运行时即CLR提供自动内存管理、类型安全等功能。 托管代码是用高级语言编写的,运行在.NET之上。可以是C#、F#等。使用它们的编译器编译的代码不会生成机器代码。但是,您将得到中间语言代…

    2025年12月17日
    000
  • C# 相当于 Java 的双括号初始化?

    Java 的双括号初始化与 C# 中的单括号完成的工作相同。 双括号在单个 Java 表达式中创建和初始化对象。 让我们说以下内容在 Java 中 – 示例 List list = new List() {{ add(“One”); add(“Two”); add(“Three”); a…

    2025年12月17日
    000
  • C# 中隐式类型转换和显式类型转换有什么区别?

    以下是隐式类型转换和显式类型转换之间的区别 − 隐式类型转换 C#以类型安全的方式执行这些转换。 为了理解这个概念,让我们隐式地将int转换为long。 int val1 = 11000;int val2 = 35600;long sum;sum = val1 + val2; 上面,我们有两个整型变…

    2025年12月17日
    000
  • 在 C# 中实现堆栈

    Stack 类在 C# 中使用 Push 和 Pop 操作实现。 Stack 在 C# 中用于表示对象的后进先出集合。以下是 Stack 类的方法 – Sr.No. 方法及说明 1public virtual void Clear(); 从堆栈中删除所有元素。 2public virtu…

    2025年12月17日
    000
  • C# 中的网络

    .NET Framework 具有分层、可扩展和托管的网络服务实现。您可以轻松地将它们集成到您的应用程序中。使用System.Net;命名空间。 让我们看看如何访问 Uri 类:在 C# 中,它提供统一资源标识符 (URI) 的对象表示 – Uri uri = new Uri(“http…

    2025年12月17日
    000
  • C# 程序从对象列表中查找整数并使用 LINQ 对它们进行排序

    简介 在本文中,我们将学习如何编写 C# 程序从对象列表中查找整数并使用 LINQ 对它们进行排序。让我们对该语言进行一个简单的概述。 C# 编程语言经常用于开发桌面、Web 和移动应用程序。语言集成查询(有时称为 LINQ)是 C# 的强项之一。开发人员可以快速查询来自各种来源的数据,包括数组、集…

    2025年12月17日
    000
  • C# 如何从 URL 下载文件?

    可以使用网络客户端从URL下载文件。它可以在 System.Net 中使用命名空间。 WebClient 类提供了发送数据或接收数据的常用方法来自由 URI 标识的任何本地、内联网或 Internet 资源。 Web 客户端可以称为应用程序或 Web 浏览器(例如 Google Chrome、Int…

    2025年12月17日
    000
  • C# 中哈希表和字典的区别

    哈希表和字典都是用于存储数据的数据结构类型。这两种数据结构都以键值对的形式存储数据。 根据它们的关键特征之间的差异,我们可以区分 HashTable 和 Dictionary,如下 – Sr.编号 键 哈希表 字典 1 字典 1 td>定义HashTable 是非泛型集合,用于以键…

    2025年12月17日
    000
  • C# 中相当于 Java 的 isInstance() 的是什么?

    java.lang.Class.isInstance() 确定指定的 Object 是否与赋值兼容该类表示的对象 Java 的 isInstance() 方法在 C# 中相当于 IsAssignableFrom()。 isInstance() 等价的另一种最简单的方法是 – bool r…

    2025年12月17日
    000
  • 如何在 LINQ C# 编程中同时使用 Take 和 Skip 运算符

    我们正在创建 Employee 类的两个实例,e 和 e1。 e 被分配给e1。两个对象都指向同一个引用,因此我们将得到 true对于所有的Equals,预期输出。 在第二个案例中,我们可以观察到,尽管属性值相同Equals返回false。基本上,当参数引用不同的对象时等于不检查值并始终返回 fal…

    2025年12月17日
    000
  • C# 中交换字符串的字符

    要交换字符串的字符,请使用 Select 方法。 首先,假设我们的字符串是 – string str = “PQRQP”; 现在,您需要将每次出现的 P 与 Q 交换,将 Q 与 P 交换 – str.Select(a=> a == ‘P’ ? ‘Q’ : (a==’Q…

    2025年12月17日
    000
  • 如何在C#接口中声明成员函数?

    在C#中声明接口的成员函数 − public interface InterfaceName { // interface members void InterfaceMemberOne(); double InterfaceMembeTwo(); void InterfaceMemberThree…

    2025年12月17日
    000
  • 什么是浅复制以及它与 C# 中的深复制有何不同?

    浅拷贝 − 浅拷贝是指拷贝一个对象的”主要”部分,但不拷贝内部的部分objects. The “inner objects” are shared between the original object and its copy. The proble…

    2025年12月17日
    000
  • C# 中的锯齿数组是什么?

    交错数组是 C# 中的数组的数组。您可以声明并初始化它 – int[][] rank = new int[1][]{new int[]{5,3,1}}; 以下示例展示了如何在 C# 中使用锯齿状数组 – 示例 using System;namespace Program { …

    2025年12月17日
    000
  • C# 中的集合

    C# 中的集合是 HashSet。 C# 中的 HashSet 消除了数组中的重复字符串或元素。在C#中,它是一个优化的集合集合 声明HashSet – var h = new HashSet(arr1); 上面,我们已经在 HashSet 中设置了已经声明的数组 arr1。 现在将其设…

    2025年12月17日
    000
  • C#中如何捕获内存不足异常?

    当 CLR 无法分配所需的足够内存时,会发生 System.OutOfMemoryException。 System.OutOfMemoryException 继承自 System.SystemException 类。 设置字符串 – string StudentName = “Tom”…

    2025年12月17日
    000
  • C# 程序检查路径是目录还是文件

    简介 让我们学习如何编写 C# 程序来检查路径是目录还是文件。目录,也称为文件夹,是计算机上可以保存文件的位置。除了文件之外,目录还包含其他目录或快捷方式。 文件是驱动器上的数据集合,具有唯一标识符和目录路径。当打开文件进行查看或写入时,它会转换为流。流只是遍历通信路径的字节序列。 文件与目录 文件…

    2025年12月17日
    000
  • C# 反转字符串的程序

    我们的示例字符串是 – myStr = “Tom”; 要反转字符串,首先找到字符串的长度 − // find string lengthint len;len = myStr.Length – 1; 现在,使用 while 循环,直到长度大于 0 – while (len &…

    2025年12月17日
    000
  • C# 中的静态方法与非静态方法

    Declare a member function as static. Such functions can access only static variables. The static functions exist even before the object is created. A …

    2025年12月17日
    000
  • C# 中的多重继承是什么?

    C#不支持多重继承的使用,但可以使用接口来实现。 下面是使用接口继承的实现。创建两个接口 – public interface BaseOne { void display();}public interface BaseTwo { void display();} 现在像设置派生类一样…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信