65.9K
CodeProject 正在变化。 阅读更多。
Home

磁盘分析器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.23/5 (20投票s)

2007年12月29日

CPOL

2分钟阅读

viewsIcon

102219

downloadIcon

6058

使用 C# 的磁盘分析器。

引言

磁盘分析器使您能够了解磁盘上的文件和目录占用了多少空间,并帮助您查找不再使用的文件和文件夹。该工具分析您的磁盘驱动器,并按类型收集目录大小和文件大小的统计信息,您可以在概述图表和详细信息表中查看这些信息。

我使用 Julijan Sribar 开发的饼图控件来显示结果。 真的值得一看。 它是饼图控件的最佳实现之一。

此外,我正在使用 Mark Rideout 实现的树形网格视图,它允许按扩展名显示文件。 您可以在他的博客这里访问。

filetypes.JPG

此外,此程序允许您设置目录和文件分析的过滤器。 我必须同意,这需要增强以允许更多自定义。

背景

我正在寻找一个简单的磁盘分析器实用程序来计算目录的大小,并进行一些清理,以帮助我更好地组织我的文件。 我认为写一个会很好。

特点

  • 按目录显示大小,使用DataGridView 和饼图
  • 按文件扩展名报告大小,使用DataGridView 和饼图
  • 按大小筛选选项; 包含和排除文件扩展名;零字节的目录
  • 将结果导出到 Excel;这以 Excel XML 格式保存,使用 CarlosAg ExcelXmlWriter 库
  • 打开文件/文件夹及其父目录

使用代码

目录大小的计算是通过使用递归函数来计算每个子目录的大小来完成的,使用 LINQ

public long CalculateSize(DirectoryInfo directory)
{
    CurrentDirectory = directory.FullName;
    this.BeginInvoke(new UIDelegate(updateCurrentStatus));
    if (abortFlag) return 0;
    long Size = 0;
    // Add file sizes.
    IEnumerable iEnumSize = from fi in directory.GetFiles() select fi.Lenght;
    Size += iEnumSize.Sum();
  
    // Add subdirectory sizes.
    IEnumerable<long /> iEnumSize = from di in directory.GetDirectories() 
                                       select CalculateSize(di);
    Size += iEnumSize.Sum();
    return Size;
}

关注点

将数据从DataGridView 导出到 Excel

excel.JPG

以下是从DataGridView 导出数据到 Excel 的代码段,使用 CarlosAg ExcelXMLWriter 库。 您可以在此处找到有关 CarlosAg ExcelXMLWriter 库的更多详细信息。 这允许您创建 Excel 文件而无需使用 COM 对象。

string filename = "myExcel.xls";
                Workbook book = new Workbook();
                book.ExcelWorkbook.ActiveSheetIndex = 1;
                
book.Properties.Author = "Disk Analyzer";
                book.Properties.Title = "Disk Analyzer Report";
                book.Properties.Created = DateTime.Now;


WorksheetStyle style = book.Styles.Add("HeaderStyle");
style.Font.FontName = "Tahoma";
style.Font.Size = 11;
style.Font.Bold = true;
style.Alignment.Horizontal = StyleHorizontalAlignment.Center;
style.Font.Color = "White";
style.Interior.Color = "Blue";
style.Interior.Pattern = StyleInteriorPattern.DiagCross;

// Create the Default Style to use for everyone
style = book.Styles.Add("Default");
style.Font.FontName = "Tahoma";
style.Font.Size = 10;

// Add a Worksheet with some data
Worksheet sheet = book.Worksheets.Add("Size Analysis");
WorksheetRow row = sheet.Table.Rows.Add();
// we can optionally set some column settings
for (int i = 0; i < dataGridViewDirectory.Columns.Count; i++)
{
  sheet.Table.Columns.Add(new WorksheetColumn(150));
  row.Cells.Add(new WorksheetCell(dataGridViewDirectory.Columns[i].Name, 
                                  "HeaderStyle"));
}

// Skip one row, and add some text
row.Index = 2;
for (int i = 0; i < dataGridViewDirectory.Rows.Count; i++)
{
  row = sheet.Table.Rows.Add();
  for (int j = 0; j < dataGridViewDirectory.Columns.Count; j++)
  {
    row.Cells.Add(dataGridViewDirectory.Rows[i].Cells[j].Value.ToString());
  }
}

历史

使用项目和解决方案文件更新了文章源代码。

© . All rights reserved.