0% found this document useful (0 votes)
13 views

Assignment 1

Phpbl. Ovov.

Uploaded by

M.Taimoor Joyyah
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Assignment 1

Phpbl. Ovov.

Uploaded by

M.Taimoor Joyyah
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Resources

1. Download and install an IDE for C# for your platform, e.g. Visual Studio.
2. If you have access to a Windows computer download LINQPad:
https://www.linqpad.net
3. Take “A Tour of the C# Language”:
https://docs.microsoft.com/en-us/dotnet/articles/csharp/tour-of-csharp
4. Read the “Introduction to LINQ Queries (C#)”:
https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/c
oncepts/linq/introduction-to-linq-queries
5. LINQ Cheat Sheet (attached)

Assignment
In this assignment, you will use C# and LINQ to iterate files, to query, group and order
data, and to create an XML document based on that data.

Implementation
You must follow these implementation guidelines:

1. Create a C# console application. You can use the template from the Lecture
Notes.
This application has two command line arguments: A path to a folder and a
path to an HTML report output file. The application collects all files with the
same extension (converted to lower case) and determines for each extension,
i.e. file type, the number of files and the total size of all files of this type.
2. Implement a class with the following 4 static functions:

static IEnumerable<string>
EnumerateFilesRecursively(string path)
Enumerate all files in a given folder recursively including the entire sub-folder
hierarchy. You can use System.IO.Directory. You could use the
generator pattern (yield keyword) to implement the iterator.

static string FormatByteSize(long byteSize)


Format a byte size in human readable form. Use the following units: B, kB,
MB, GB, TB, PB, EB, and ZB where 1kB = 1000B, etc. The numerical value
should be greater or equal to 0, less than 1000, and rounded to 2 digits after
the decimal point, e.g. "1.30kB".
static XDocument CreateReport(IEnumerable<string>
files)
Create a HTML document containing a table with three columns: “Type”,
“Count”, and “Size” for the file name extension (converted to lower case), the
number of files with this type, and the total size of all files with this type,
respectively.
You can use System.IO.FileInfo to get the size of a file with a given
path.
Sort the table by the byte size value of the “Size” column in descending order.
Use your FormatByteSize function to format the value printed in the “Size”
column.
Implement this function using LINQ queries making use of group by and
orderby.
Use the System.Xml.Linq.XElement constructor to functionally construct
the XML/HTML document.

public static void Main(string[] args)


Take two command line arguments. The first value is the path of the input
folder and the second the path (including file name and extension) of the
HTML report output file. Call the functions above to create the report file.
3. Do not store the intermediate data. Instead you should use
iterators/generators to process the sequences of data element by element
without storing the entire collection.

Testing Your Code


Demonstrate that your console application works correctly by creating a report file from
some folder on your machine.

Deliverable
1. Your source code.
2. A report file generated by your application.
Rubric

You might also like