Use path-string helpers without reading or writing files.

paths Path helpers can split a file path string without touching the filesystem.

Path Parts

fileName
PathParts.cs
Replay: real traced execution (multi-file project)
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string fileName = "report.txt";
        string path = Path.Combine("lessons", fileName);

        string name = Path.GetFileNameWithoutExtension(path);
        string extension = Path.GetExtension(path);

        Console.WriteLine($"name={name}");
        Console.WriteLine($"extension={extension}");
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string fileName = "notes.md";
        string path = Path.Combine("lessons", fileName);

        string name = Path.GetFileNameWithoutExtension(path);
        string extension = Path.GetExtension(path);

        Console.WriteLine($"name={name}");
        Console.WriteLine($"extension={extension}");
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string fileName = "data.csv";
        string path = Path.Combine("lessons", fileName);

        string name = Path.GetFileNameWithoutExtension(path);
        string extension = Path.GetExtension(path);

        Console.WriteLine($"name={name}");
        Console.WriteLine($"extension={extension}");
    }
}
  1. fileName ← report.txt, path ← lessons/report.txt, name ← report

    5{6    static void Main()7    {8        string fileName→ report.txt = "report.txt"; //@fileName="notes.md", "data.csv"9        string path→ lessons/report.txt = Path.Combine("lessons", fileNamereport.txt);1011        string name→ report = Path.GetFileNameWithoutExtension(pathlessons/report.txt);12        string extension→ .txt = Path.GetExtension(pathlessons/report.txt);1314        Console.WriteLine($"name={namereport}");15        Console.WriteLine($"extension={extension.txt}");16    }
    outputname=report
    extension=.txt
  1. fileName ← notes.md, path ← lessons/notes.md, name ← notes, extension ← .md

    5{6    static void Main()7    {8        string fileName→ notes.md = "notes.md";9        string path→ lessons/notes.md = Path.Combine("lessons", fileNamenotes.md);1011        string name→ notes = Path.GetFileNameWithoutExtension(pathlessons/notes.md);12        string extension→ .md = Path.GetExtension(pathlessons/notes.md);1314        Console.WriteLine($"name={namenotes}");15        Console.WriteLine($"extension={extension.md}");16    }
    outputname=notes
    extension=.md
  1. fileName ← data.csv, path ← lessons/data.csv, name ← data, extension ← .csv

    5{6    static void Main()7    {8        string fileName→ data.csv = "data.csv";9        string path→ lessons/data.csv = Path.Combine("lessons", fileNamedata.csv);1011        string name→ data = Path.GetFileNameWithoutExtension(pathlessons/data.csv);12        string extension→ .csv = Path.GetExtension(pathlessons/data.csv);1314        Console.WriteLine($"name={namedata}");15        Console.WriteLine($"extension={extension.csv}");16    }
    outputname=data
    extension=.csv