C# - 如何从路径中提取文件名和扩展名?

Cri*_*ath 25 c# file path

所以,说我有

string path = "C:\\Program Files\\Program\\File.exe";
Run Code Online (Sandbox Code Playgroud)

我如何只获得"File.exe"?我正在考虑拆分(见下文),但我尝试的东西不起作用......

这是我的代码.

        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);
Run Code Online (Sandbox Code Playgroud)

我可能只是一个菜鸟.._.

man*_*man 84

System.IO有不同的类来处理文件和目录.在它们之间,最有用的一个是Path有许多用于处理文件和文件夹的静态帮助方法:

Path.GetExtension(yourPath); // returns .exe
Path.GetFileNameWithoutExtension(yourPath); // returns File
Path.GetFileName(yourPath); // returns File.exe
Path.GetDirectoryName(yourPath); // returns C:\Program Files\Program
Run Code Online (Sandbox Code Playgroud)

  • 并且`Path.GetDirectoryName(yourPath)`将获取文件夹路径. (5认同)

SLa*_*aks 16

你在找Path.GetFileName(string).

  • 不过,这不是你的问题所说的. (6认同)

Fat*_*DAL 8

使用最后一个字符搜索,您可以获得正确的结果.

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);
Run Code Online (Sandbox Code Playgroud)

输出:

完整档案名称:fatih.gurdal.docx

完整档案Ony名称:fatih.gurdal

完整文件扩展名:docx

  • 谢谢,这在我的场景中很有用,因为文件名在字符串中但不是物理文件. (2认同)
  • .NET Core 的注意事项 - 您应该搜索 DirectorySeparatorChar 和 AltDirectorySeparatorChar 的最后一个位置。对该帖子+1,因为它早于广泛的 .net core 使用,并且它是“显示代码”的唯一答案。如果你想硬编码它使用 `(char)47` 因为这是 Unix 分隔符和 Windows 的 AltDirectorySeparatorChar (2认同)