C# Create a Piechart for the specified Hard Disk Drive Utilization


By Paresh Rajput
Printer Friendly Version
View My Articles
50 Points
    

This application can be used to generate a piechart for the hard disk drive utilization. You can provide any drive as input and it will generate the output folder wise utilization. You can see the given output. The code is lengthy so I have provided individual pieces of the code functions.



The namespaces used:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using System.Data;

The structure used:

struct MyDirTotalSize
        {
            public string dirPath;
            public long totalSize;
            public int parent;
        }
struct MyAngleStruct { public string folderpath; public float myAngle; public long mySize; } The below function is responsible for the creating angle for each folder path: private void GeneratePieChartAngle(string path) { MyAngleStruct angStructObj; angStructObj.myAngle = 0; MyDirTotalSize eff; long opteller = 0, compsize = 0; int startingPoint = -1, startingPoint2; for (startingPoint2 = 0; startingPoint2 < SizeDir.Count; startingPoint2++) { eff = (MyDirTotalSize) (SizeDir[startingPoint2]); if (path != eff.dirPath) continue; compsize += eff.totalSize; angStructObj.folderpath = eff.dirPath; angStructObj.mySize = eff.totalSize; AngleS.Add(angStructObj); startingPoint = eff.parent; } foreach (MyDirTotalSize ef in SizeDir) { if (ef.dirPath.CompareTo(path) == 0 || startingPoint < 0) continue; if (!ef.dirPath.StartsWith(path)) continue; compsize += ef.totalSize; startingPoint2 = ef.parent; opteller += ef.totalSize; if (startingPoint2 > (startingPoint + 1)) continue; angStructObj.folderpath = ef.dirPath; angStructObj.mySize = opteller; AngleS.Add(angStructObj); opteller = 0; //ef.size; } startingPoint = AngleS.Count; for (startingPoint2 = 0; startingPoint2 < startingPoint; startingPoint2++) { angStructObj = (MyAngleStruct) (AngleS[startingPoint2]); AngleS.RemoveAt(startingPoint2); angStructObj.myAngle = (angStructObj.mySize/(float) compsize)*360; AngleS.Insert(startingPoint2, angStructObj); } } Get the total size of given directory folder: private void GetDirveDirTotalSize(string path, int index) { MyDirTotalSize total1, total2; DirectoryInfo[] dirs; DirectoryInfo dir = new DirectoryInfo(path); dirs = dir.GetDirectories(); foreach (DirectoryInfo run in dirs) { nAantalDirs = index + 1; GetDirveDirTotalSize(run.FullName, nAantalDirs); } total1.dirPath = path; long totalFileSizeInFolder=0; FileInfo[] files; DirectoryInfo file = new DirectoryInfo(path); files=file.GetFiles(); foreach(FileInfo run in files) totalFileSizeInFolder+=run.Length; total1.totalSize = totalFileSizeInFolder; total1.parent = index; SizeDir.Add(total1); total2 = (MyDirTotalSize) SizeDir[(SizeDir.Count - 1)]; nAantalDirs = total2.parent; } Draw the piechart angles from starting to ending position and you are done. private void DrawPitotal1romAngles() { float realAngle=0F; Random rnd = new Random(); Red=Green=Blue=0; pas.Clear(BackColor); foreach(MyAngleStruct total1 in AngleS) { pas.FillPie(brus,rRect,realAngle,total1.myAngle);realAngle+=total1.myAngle; //Generate random color for drawing int myRed = myGreen = myBlue = Random() % 250; brus.Color = System.Drawing.Color.FromArgb(myRed,myGreen,myBlue); } }


Output:







Biography - Paresh Rajput
I love to work on Research Oriented Works, System Programming in C, C++, Perl and C# .NET. I know web technologies and have been working on Java, J2EE, ASP.NET, JSP etc. I worked on "Adaptive Load Balancer" and modified the LINUX kernel to balance the load between set of computers using Process Migration mechanism. I am platform and language independent, quick and continues learner person.

button
 
Article Discussion: C# : Create the piechart for the specified Hard Disk Drive Utilization
Paresh Rajput posted at 06-Dec-08 02:57
Original Article

 
http://210.245.85.167/hpa/programming/archive/2009/01/22/t-o-bi-u-xem-dung-l-ng-c-ng.aspx
Stella Pandian replied to Paresh Rajput at 03-Apr-09 05:14

 


 
Its my complete article copied there. I will inform Rob about this.
Paresh Rajput replied to Stella Pandian at 03-Apr-09 10:26
end of post

  

Search

search



Purchase