TheDeveloperBlog.com

Home | Contact Us

CSharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript

C# Sort Files by Their Sizes

This C# program sorts files by their sizes in bytes. It uses the System.Linq namespace.

Sort files, sizes. Each file in a directory has a size in bytes.

We use a C# method to sort an array of these files by their sizes in bytes. This is sometimes useful for categorization and presenting UIs with file lists.

Example. We sort files using the LINQ extension methods. We use the FileInfo class and its Length property to get the length of each file. The File class doesn't have a Length getter, and reading in the entire file each time would be wasteful.

C# program that sorts files by size

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main()
    {
	// Directory of files.
	const string dir = "C:\\site";

	// File names.
	string[] fns = Directory.GetFiles(dir);

	// Order by size.
	var sort = from fn in fns
		   orderby new FileInfo(fn).Length descending
		   select fn;

	// List files.
	foreach (string n in sort)
	{
	    Console.WriteLine(n);
	}
    }
}

Output

(List of all files in the directory)

The program uses the Directory.GetFiles method found in the System.IO namespace. This is the easiest and normally the best way to get a string array containing each file name. The identifier "fns" is used to reference the string array.

FileString Array

Understanding query syntax. We use the special LINQ syntax to order the string array by each Length value from the FileInfo of each file. We can use any C# expression in the query orderby part. The program then lists the files.

Tip: The descending contextual keyword is used in this example and you can find more information on this useful keyword.

Descending

Summary. We sorted files by their sizes using the C# language and its LINQ extensions. In complex applications, you will store the file metadata in your object models. But not all applications are complex and this code is useful for small tasks.

FileInfo