如果filename包含无效字符,GetExtension()将失败

时间:2015-04-17 08:51:20

标签: c#

在我的C#应用​​中,我正在使用Path.GetExtension()

输入到此将取决于文件处理。有时我的文件名可能有myfile-<ID>。我将在稍后阶段处理ID值,因此在检查扩展时我无法删除<>

GetExtension()抛出无效字符的异常。当filename可能包含无效字符时,检查文件是否有扩展名的最佳方法是什么。

2 个答案:

答案 0 :(得分:1)

这会给你和.Extension,比如GetExtension do

Dim sPath,sExt As String
sPath  = "c:\namename<2>.RAR"
If sPath.LastIndexOf(CChar(".")) <> -1 
  sExt = sPath.Substring(sPath.LastIndexOf(CChar(".")))
Else
  sExt = Nothing 'no extension?
End if 

抱歉,您要求提供C#

string sPath = null;
string sExt = null;
sPath = "c:\\namename<2>.RAR";
if (sPath.LastIndexOf(Convert.ToChar(".")) != -1) {
    sExt = sPath.Substring(sPath.LastIndexOf('.')));
} else {
    sExt = null; //no extension?
}

修改 如果路径中有“。”

string sPath = null;
string sExt = null;
sPath = "c:\\folder.folder\folder\namename<2>.RAR";

sPath = sPath.Substring(sPath.LastIndexOf('\')));

if (sPath.LastIndexOf('.') != -1) {
    sExt = sPath.Substring(sPath.LastIndexOf('.'));
} else {
    sExt = null; //no extension?
}

答案 1 :(得分:1)

使用 GetExtension(路径)方法查找扩展程序时,您可以清理使用该路径,而不是按原样使用路径。

以下是它的扩展方法:

using System.IO;
using System.Linq;

public static class FileNameExtensions
{
    public static string ToValidPath(this string path)
    {
        return Path.GetInvalidFileNameChars()
            .Aggregate(path, (previous, current) => previous.Replace(current.ToString(), string.Empty));
    }
}

因此,您现在可以使用以下参数调用GetExtension方法: GetExtension(path.ToValidPath());