如果我有一个字符串说“abc.txt”,有没有一个快速的方法来获得一个子字符串,这只是“abc”?

我不能做一个fileName.IndexOf('.'),因为文件名可以是“abc.123.txt”或其他东西,我显然只是想摆脱扩展名(即。“abc.123”)。


当前回答

我知道这是个老问题了,帕西。GetFileNameWithoutExtensionis一个更好的,可能更干净的选项。但就我个人而言,我已经将这两个方法添加到我的项目中,并希望与大家分享。这需要c# 8.0,因为它使用范围和索引。

public static string RemoveExtension(this string file) => ReplaceExtension(file, null);

public static string ReplaceExtension(this string file, string extension)
{
    var split = file.Split('.');

    if (string.IsNullOrEmpty(extension))
        return string.Join(".", split[..^1]);

    split[^1] = extension;

    return string.Join(".", split);
}

其他回答

ReadOnlySpan<char> filename = "abc.def.ghi.txt";
var fileNameWithoutExtension = RemoveFileExtension(filename); //abc.def.ghi

string RemoveFileExtension(ReadOnlySpan<char> path)
{
    var lastPeriod = path.LastIndexOf('.');
    return (lastPeriod < 0 ? path : path[..lastPeriod]).ToString();
}

我知道这是个老问题了,帕西。GetFileNameWithoutExtensionis一个更好的,可能更干净的选项。但就我个人而言,我已经将这两个方法添加到我的项目中,并希望与大家分享。这需要c# 8.0,因为它使用范围和索引。

public static string RemoveExtension(this string file) => ReplaceExtension(file, null);

public static string ReplaceExtension(this string file, string extension)
{
    var split = file.Split('.');

    if (string.IsNullOrEmpty(extension))
        return string.Join(".", split[..^1]);

    split[^1] = extension;

    return string.Join(".", split);
}

框架中有一个用于此目的的方法,该方法将保留除扩展之外的完整路径。

System.IO.Path.ChangeExtension(path, null);

如果只需要文件名,请使用

System.IO.Path.GetFileNameWithoutExtension(path);

这个实现应该可以工作。

string file = "abc.txt";
string fileNoExtension = file.Replace(".txt", "");

你可能不会问UWP api。 但是在UWP中,文件。DisplayName为不带扩展名的名称。希望对别人有用。