C# - How to extract the file name and extension from a path?

67,680

Solution 1

System.IO has different classes to work with files and directories. Between them, one of the most useful one is Path which has lots of static helper methods for working with files and folders:

Path.GetExtension(yourPath); // returns .exe
Path.GetFileNameWithoutExtension(yourPath); // returns File
Path.GetFileName(yourPath); // returns File.exe
Path.GetDirectoryName(yourPath); // returns C:\Program Files\Program

Solution 2

You're looking for Path.GetFileName(string).

Solution 3

With the last character search you can get the right result.

string path = "C:\\Program Files\\Program\\fatih.gurdal.docx";
string fileName = path.Substring(path.LastIndexOf(((char)92))+ 1);
int index = fileName.LastIndexOf('.');
string onyName= fileName.Substring(0, index);
string fileExtension = fileName.Substring(index + 1);
Console.WriteLine("Full File Name: "+fileName);
Console.WriteLine("Full File Ony Name: "+onyName);
Console.WriteLine("Full File Extension: "+fileExtension);

Output:

Full File Name: fatih.gurdal.docx

Full File Ony Name: fatih.gurdal

Full File Extension: docx

Share:
67,680
Admin
Author by

Admin

Updated on January 04, 2021

Comments

  • Admin
    Admin over 3 years

    So, say I have

    string path = "C:\\Program Files\\Program\\File.exe";
    

    How do I get only "File.exe"? I was thinking something with split (see below), but what I tried doesn't work...

    This is my code.

            List<string> procs = new List<string>(); //Used to check if designated process is already running
            foreach (Process prcs in Process.GetProcesses())
                procs.Add(prcs.ProcessName); //Add each process to the list
            foreach (string l in File.ReadAllLines("MultiStart.txt")) //Get list of processes (full path)
                if (!l.StartsWith("//")) //Check if it's commented out
                    if (!procs.Contains(l.Split('\\')[l.Split('\\').Length - 1])) //Check if process is already running
                        Process.Start(l);
    

    I'm probably just being a noob. ._.