C# FileInfo tutorial shows how to work with files with FileInfo in C#. FileInfo provides properties and instance methods for the creation, copying, deletion, moving, and opening of files.
last modified May 18, 2025
In this article, we explore how FileInfo facilitates file management in C#.
The FileInfo class provides a range of properties and instance methods for handling files, including creation, copying, deletion, moving, and opening operations. It also supports the initialization of FileStream objects, allowing efficient file access and manipulation.
.NET also includes the File class, which serves a similar purpose but differs in functionality. While FileInfo represents a specific file instance and enables detailed file operations, File is a static utility class that provides convenient methods for working with files without requiring an object instance.
Using FileInfo is beneficial when you need to retrieve file metadata, perform multiple operations on a file, or optimize performance by reducing redundant security checks. On the other hand, File is ideal for simple file operations that do not require persistent file objects.
words.txt
sky borrow war ocean cup cloud water read book look
In several examples, we use this text file.
We have a simple example with FileInfo.
Program.cs
var fi = new FileInfo(“words.txt”);
Console.WriteLine(fi.Name); Console.WriteLine(fi.FullName);
bool ro = fi.IsReadOnly;
if (ro) { Console.WriteLine(“readonly file”); } else { Console.WriteLine(“not a readonly file”); }
We create a FileInfo object, passing a text file to its constructor. Then we print its three properties.
Console.WriteLine(fi.Name); Console.WriteLine(fi.FullName);
We print its name and fullname.
bool ro = fi.IsReadOnly;
if (ro) { Console.WriteLine(“readonly file”); } else { Console.WriteLine(“not a readonly file”); }
We determine whether the file is readonly.
$ dotnet run words.txt /home/jano/Documents/prog/csharp/fileinfo/First/words.txt not a readonly file
The CreateText method creates a StreamWriter that writes a new text file.
Program.cs
var fi = new FileInfo(“colours.txt”);
using StreamWriter sw = fi.CreateText();
sw.WriteLine(“red”); sw.WriteLine(“yellow”); sw.WriteLine(“white”); sw.WriteLine(“brown”);
We create a new text file colours.txt. We write four lines into the file.
using StreamWriter sw = fi.CreateText();
The StreamWriter class implements the IDisposable interface; therefore, we use the using statement to close the resources when we are done.
The OpenText creates a StreamReader with UTF8 encoding that reads from an existing text file.
Program.cs
var fi = new FileInfo(“words.txt”);
using StreamReader sr = fi.OpenText(); string? s = string.Empty;
while ((s = sr.ReadLine()) != null) { Console.WriteLine(s); }
In the example, we read a file line by line.
$ dotnet run sky borrow war ocean cup cloud water read book look
The Delete method deletes a file.
Program.cs
var fi = new FileInfo("/etc/hostname");
try { fi.Delete();
} catch (UnauthorizedAccessException e) { Console.WriteLine(“failed to delete file”); Console.WriteLine(e.Message); }
In the example, we try to delete a system file. Since we do not have enough permissions, an exception is thrown.
$ dotnet run failed to delete file Access to the path ‘/etc/hostname’ is denied.
The CopyTo copies an existing file to a new file, disallowing the overwriting of an existing file.
Program.cs
var fi = new FileInfo(“words.txt”); fi.CopyTo(“words2.txt”);
The example creates a copy of the words.txt file.
The Directory gets an instance of the parent directory.
Program.cs
var fi = new FileInfo("/etc/hostname"); var di = fi.Directory;
Console.WriteLine(di?.FullName); Console.WriteLine(di?.LastAccessTime); Console.WriteLine(di?.Root);
The example prints the file’s parent directory fullname, last access time and root directory.
$ dotnet run /etc 6/30/2022 11:46:07 AM /
You can rename a file by using the MoveTo method of FileInfo. This method moves the file to a new path, which can include a new name.
Program.cs
var fi = new FileInfo(“words.txt”); if (fi.Exists) { fi.MoveTo(“words_renamed.txt”); Console.WriteLine(“File renamed to words_renamed.txt”); } else { Console.WriteLine(“File does not exist.”); }
This example checks if words.txt exists and renames it to words_renamed.txt.
$ dotnet run File renamed to words_renamed.txt
Before performing file operations, it is good practice to check if the file exists using the Exists property.
Program.cs
var fi = new FileInfo(“words.txt”);
if (fi.Exists) { Console.WriteLine(“File exists.”); } else { Console.WriteLine(“File does not exist.”); }
This example prints a message depending on whether words.txt exists.
$ dotnet run File exists.
The AppendText method opens an existing file for appending text. If the file does not exist, it creates a new one.
Program.cs
var fi = new FileInfo(“words.txt”);
using (StreamWriter sw = fi.AppendText()) { sw.WriteLine(“newword”); }
Console.WriteLine(“Text appended to file.”);
This example appends the word newword to words.txt.
$ dotnet run Text appended to file.
FileInfo class - language reference
In this article we have used FileInfo to work with files.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all C# tutorials.