Check if a Path has a File Name Extension in C#

In C# development, checking if a path has a file name extension is a common requirement for file validation, type checking, and implementing file-specific operations. The .NET Framework provides built-in methods to handle this task efficiently through the Path class.

Syntax

The primary method for extracting file extensions is Path.GetExtension()

string extension = Path.GetExtension(filePath);

To check if an extension exists, combine it with string validation

bool hasExtension = !string.IsNullOrEmpty(Path.GetExtension(filePath));

Using Path.GetExtension()

The Path.GetExtension() method returns the file extension including the period (.) or an empty string if no extension exists

using System;
using System.IO;

class Program {
   static void Main() {
      string filePath = @"C:\Example\document.pdf";
      
      string extension = Path.GetExtension(filePath);
      
      if (string.IsNullOrEmpty(extension)) {
         Console.WriteLine("The path does not have a file name extension.");
      }
      else {
         Console.WriteLine($"The file name extension is: {extension}");
      }
   }
}

The output of the above code is

The file name extension is: .pdf

Using Path.HasExtension()

For a more direct approach, use Path.HasExtension() which returns a boolean value

using System;
using System.IO;

class Program {
   static void Main() {
      string[] paths = {
         @"C:\Documents\report.docx",
         @"C:\Documents\README",
         @"C:\Scripts\backup.bat"
      };
      
      foreach (string path in paths) {
         bool hasExtension = Path.HasExtension(path);
         Console.WriteLine($"Path: {path}");
         Console.WriteLine($"Has extension: {hasExtension}");
         if (hasExtension) {
            Console.WriteLine($"Extension: {Path.GetExtension(path)}");
         }
         Console.WriteLine();
      }
   }
}

The output of the above code is

Path: C:\Documents\report.docx
Has extension: True
Extension: .docx

Path: C:\Documents\README
Has extension: False

Path: C:\Scripts\backup.bat
Has extension: True
Extension: .bat

Handling Edge Cases

Understanding how Path.GetExtension() behaves in edge cases is important for robust code

using System;
using System.IO;

class Program {
   static void Main() {
      TestExtension(null);                    // Null path
      TestExtension(@"C:\folder\file");       // No extension
      TestExtension(@".gitignore");           // Extension only
      TestExtension(@"C:\temp\.config");      // Hidden file with extension
      TestExtension(@"");                     // Empty string
      TestExtension(@"file.name.txt");        // Multiple dots
   }
   
   static void TestExtension(string path) {
      try {
         string extension = Path.GetExtension(path);
         bool hasExt = Path.HasExtension(path);
         
         Console.WriteLine($"Path: '{path ?? "null"}'");
         Console.WriteLine($"Extension: '{extension ?? "null"}'");
         Console.WriteLine($"Has extension: {hasExt}");
         Console.WriteLine("---");
      }
      catch (Exception ex) {
         Console.WriteLine($"Error with path '{path ?? "null"}': {ex.Message}");
         Console.WriteLine("---");
      }
   }
}

The output of the above code is

Path: 'null'
Extension: 'null'
Has extension: False
---
Path: 'C:\folder\file'
Extension: ''
Has extension: False
---
Path: '.gitignore'
Extension: '.gitignore'
Has extension: True
---
Path: 'C:\temp\.config'
Extension: '.config'
Has extension: True
---
Path: ''
Extension: ''
Has extension: False
---
Path: 'file.name.txt'
Extension: '.txt'
Has extension: True
---

Key Rules

  • Path.GetExtension() returns null if the input path is null.

  • Returns an empty string if no extension exists.

  • For files starting with a dot (like .gitignore), the entire name is considered the extension.

  • Only the last dot-separated segment is returned as the extension.

  • Path.HasExtension() returns false for null or empty paths.

Comparison

Method Return Type Use Case
Path.GetExtension() string When you need the actual extension value
Path.HasExtension() bool When you only need to check if extension exists
string.IsNullOrEmpty(Path.GetExtension()) bool Alternative approach for checking extension existence

Conclusion

C# provides efficient methods through the Path class to check file extensions. Use Path.HasExtension() for boolean checks and Path.GetExtension() when you need the actual extension value. Always handle edge cases like null paths and files starting with dots to ensure robust file processing.

Updated on: 2026-03-17T07:04:36+05:30

7K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements