系统管理员Windows VistaWindows 2003.NET 3.0Windows 2000LINQWindows XP.NET 3.5Windows FormsC# 3.0中级开发Windows.NETC#
磁盘分析器






4.23/5 (20投票s)
使用 C# 的磁盘分析器。
引言
磁盘分析器使您能够了解磁盘上的文件和目录占用了多少空间,并帮助您查找不再使用的文件和文件夹。该工具分析您的磁盘驱动器,并按类型收集目录大小和文件大小的统计信息,您可以在概述图表和详细信息表中查看这些信息。
我使用 Julijan Sribar 开发的饼图控件来显示结果。 真的值得一看。 它是饼图控件的最佳实现之一。
此外,我正在使用 Mark Rideout 实现的树形网格视图,它允许按扩展名显示文件。 您可以在他的博客这里访问。
此外,此程序允许您设置目录和文件分析的过滤器。 我必须同意,这需要增强以允许更多自定义。
背景
我正在寻找一个简单的磁盘分析器实用程序来计算目录的大小,并进行一些清理,以帮助我更好地组织我的文件。 我认为写一个会很好。
特点
- 按目录显示大小,使用
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
以下是从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());
}
}
历史
使用项目和解决方案文件更新了文章源代码。