C# – How to search for files in a directory

You can use Directory.EnumerateFiles() (in System.IO) to search for files in a directory. This has many overloads, allowing you to specify exactly what you want. You can get all the files in a directory, get all files in all subdirectories, filter files by name (including extension), and filter by attributes. Here’s an example of getting … Read more

C# – How to read a file

The simplest way to read a file is to use a high-level method in the .NET File API (in System.IO), such as File.ReadAllText(). These high-level methods abstract away the details of opening a file stream, reading it with StreamReader, and closing the file. Here’s an example of reading a text file’s content using File.ReadAllText(): Notice … Read more

C# – How to create a file and write to it

There are a few ways to create a file and write to it using the .NET File API (in System.IO). The simplest way is to use high-level methods like File.WriteAllText() and File.WriteAllLines(), specifying the file path and string(s) to write to the file. Here’s an example of using these (and their async equivalents): These high-level … Read more

C# – How to delete a file

You can use System.IO.File.Delete() to delete a file by specifying its relative or absolute path. Here’s an example: Note: Unlike other methods in the File API, there’s no async version of File.Delete(). If the specified file exists and the permissions are right, then File.Delete() deletes the file as expected. If there’s a problem, it throws … Read more

C# – Save a list of strings to a file

The simplest way to save a list of strings to a file is to use File.WriteAllLines(). This creates (or overwrites) the specified file and writes each string on a new line. The resulting file looks like this: Note: Showing non-printable newline characters \r\n for clarity. Specifying the separator character What if you want to separate … Read more

C# – Get a file’s checksum using any hashing algorithm

This article shows how to get a file’s checksum using any of these hashing algorithms: MD5, SHA1, SHA256, SHA384, and SHA512. If you are only interested getting a specific type of checksum, take a look at the first section. If you’re interested in a general-purpose checksum method that allows you to generate the checksum using … Read more

Brief intro to the File API in .NET

.NET has a good, high-level File API that abstracts away the complexity of file operations. You can create, read, update, delete, and search for files with a single method call in most scenarios. The File API is located in the System.IO namespace. Here’s a brief example of creating a new file with content, reading its … Read more

C# – Find all empty directories

Let’s say you want to search the file system and find all empty directories. An empty directory has the following conditions: To check if a directory is empty, you have to recursively check all of its subdirectories for any files. Use Directory.EnumerateDirectories() to loop through a directory’s immediate subdirectories, and use Directory.EnumerateFiles().Any() to check for … Read more

How to use relative paths in a Windows Service

Relative paths are resolved relative to the current working directory. When you’re running a Windows Service, the default working directory is C:\Windows\system32 or C:\Windows\SysWOW64. Therefore relative paths are resolved from these system folders, which can lead to problems when read/writing files. Here are the most common problems you’ll run into: File or Directory cannot be … Read more