在 C# 中,主文件夹和子文件夹的磁盘上文件夹的大小.子文件夹的帮助
本文关键字:文件夹 磁盘 帮助 主文件 | 更新日期: 2023-09-27 18:35:52
我是C#世界的新手,我正在尝试获取目录/文件夹的dis大小。以下是文件夹和子文件夹总大小的代码。我想要这个总大小,但我更想要的是为目录中的其他子文件夹获得相同的结果。例如:主目录/文件夹是水果,它有名为橙色,苹果,芒果等的子文件夹。所以这段代码得到了水果的总大小,但现在我希望橙子、苹果、芒果的总大小也单独列出。
请帮我修复代码!
class Program
{
static void Main(string[] args)
{
DirectoryInfo dInfo = new DirectoryInfo(@"C:'Users");
long sizeOfDir = DiskSize(dInfo, true);
Console.WriteLine("Size on disk in MB : " +
"{0:N2} MB", ((double)sizeOfDir) / (1024 * 1024));
Console.ReadLine();
}
static long DiskSize(DirectoryInfo dInfo, bool includeSubDir)
{
long totalSize = dInfo.EnumerateFiles()
.Sum(file => file.Length);
if (includeSubDir)
{
totalSize += dInfo.EnumerateDirectories()
.Sum(dir => DiskSize(dir, true));
}
return totalSize;
}
这是我测试过的代码。给出每个目录的结果。
class Program {
static void Main(string[] args) {
DirectoryInfo dInfo = new DirectoryInfo(@"D:'temp");
foreach (DirectoryInfo item in dInfo.EnumerateDirectories()) {
long sizeOfDir = DiskSize(item, true);
Console.WriteLine("Size on disk in MB : " +
"{0:N2} MB", ((double)sizeOfDir) / (1024 * 1024));
}
Console.ReadLine();
}
static long DiskSize(DirectoryInfo dInfo, bool includeSubDir) {
long totalSize = dInfo.EnumerateFiles()
.Sum(file => file.Length);
if (includeSubDir) {
totalSize += dInfo.EnumerateDirectories()
.Sum(dir => DiskSize(dir, true));
}
return totalSize;
}
}
执行以下操作怎么样?
var files = Directory.GetFiles(@"C:'Users", "*.*", SearchOption.AllDirectories);
long totalSize = 0;
foreach (string name in files)
{
var info = new FileInfo(name);
totalSize += info.Length;
}
return totalSize;
您可以使用 GetDirectories()
方法,并以递归方式调用函数,获取每个 DirectoryInfo 对象的磁盘大小。
static void Main(string[] args)
{
ScanDisksForSize(new DirectoryInfo(@"C:'Users"));
Console.ReadLine();
}
static void ScanDirectoriesForSize(DirectoryInfo topDir)
{
long sizeOfDir;
if (topDir != null)
sizeOfDir = DiskSize(topDir);
else
return;
Console.WriteLine("Size on disk of {0}: {1:N2} MB", topDir.Name, ((double)sizeOfDir) / (1024 * 1024));
//Do subfolders
var subFolders = topDir.GetDirectories();
if (subFolders == null)
return;
foreach (var folder in subFolders)
ScanDisksForSize(folder);
}
static long DiskSize(DirectoryInfo dInfo)
{
try
{
long totalSize = dInfo.EnumerateFiles().Sum(file => file.Length);
return totalSize;
}
catch (Exception)
{
return 0;
}
}
不要包含一些错误检查。