/* This method prints the contents of folderList and fileList to a * text file named "directory contents.txt", along with some other * useful information. There is also lots of arbitrary formatting * to make the results more readable. */ public void exportListToFile() { StreamWriter outputFile = new StreamWriter(@".\directory contents.txt", true); string listHead = String.Format("The contents of {0} are:\r\n", this.dir.FullName); outputFile.WriteLine(listHead); StringBuilder itemListing = new StringBuilder(); if (this.folderList.Any() == false && this.fileList.Any() == false) { outputFile.WriteLine("EMPTY".PadLeft(40)); } else { foreach (ItemTraits folder in this.folderList) { SizeTraits folderSize = getSizeTraits((float)folder.itemSize); itemListing.AppendFormat("{0}{1}{2}{3}", "".PadLeft(4), "Folder".PadRight(10), this.sliceString(folder.itemName, 40), String.Concat(folderSize.size.ToString("0.## ") + folderSize.unit).PadLeft(13)); outputFile.WriteLine(itemListing); itemListing.Clear(); } foreach (ItemTraits file in this.fileList) { SizeTraits fileSize = getSizeTraits((float)file.itemSize); itemListing.AppendFormat("{0}{1}{2}{3}", "".PadLeft(4), "File".PadRight(10), this.sliceString(file.itemName, 40), String.Concat(fileSize.size.ToString("0.## ") + fileSize.unit).PadLeft(13)); outputFile.WriteLine(itemListing); itemListing.Clear(); } } long dirSize = getFolderSize(this.dir); SizeTraits dirSizeTraits = getSizeTraits((float)dirSize); string dirSizeListing = String.Format("Total directory size = {0:0.00} {1}", dirSizeTraits.size, dirSizeTraits.unit); string listTail = String.Format("\r\n{0}\r\n", dirSizeListing.PadLeft(71)); outputFile.WriteLine(listTail); outputFile.Close(); }
/* This method takes the size of a file/folder in bytes, and converts * it to either giga-, mega-, or kilobytes depending on which is most * appropriate. It also appends the relevant unit into the "unit" field * of a a SizeTraits struct, which can later be printed. */ SizeTraits getSizeTraits(float originalSize) { SizeTraits result = new SizeTraits(); result.size = originalSize; result.unit = "B"; if (originalSize / 1E9 >= 1) { result.size = originalSize / (float)1E9; result.unit = "GB"; } else if (originalSize / 1E6 >= 1) { result.size = originalSize / (float)1E6; result.unit = "MB"; } else if (originalSize / 1E3 >= 1) { result.size = originalSize / (float)1E3; result.unit = "KB"; } return(result); }