6

所以我的 C# 项目中有一些文件扩展名,如果它们存在,我需要从文件名中删除它们。

到目前为止,我知道我可以检查子字符串是否在文件名中。

if (stringValue.Contains(anotherStringValue))
{  
    // Do Something // 
}

所以如果说stringValuetest.asm,然后它包含.asm,我想以某种方式删除.asmfrom stringValue

我怎样才能做到这一点?

4

4 回答 4

7

如果您想要与Path库相结合的“黑名单”方法:

// list of extensions you want removed
String[] badExtensions = new[]{ ".asm" };

// original filename
String filename = "test.asm";

// test if the filename has a bad extension
if (badExtensions.Contains(Path.GetExtension(filename).ToLower())){
    // it does, so remove it
    filename = Path.GetFileNameWithoutExtension(filename);
}

处理的例子:

test.asm        = test
image.jpg       = image.jpg
foo.asm.cs      = foo.asm.cs    <-- Note: .Contains() & .Replace() would fail
于 2013-07-26T19:25:57.247 回答
7

您可以使用Path.GetFileNameWithoutExtension(filepath) 来做到这一点。

if (Path.GetExtension(stringValue) == anotherStringValue)
{  
    stringValue = Path.GetFileNameWithoutExtension(stringValue);
}
于 2013-07-26T19:24:37.163 回答
6

不需要 if(),只需使用:

stringValue = stringValue.Replace(anotherStringValue,"");

如果anotherStringValue在 中找不到stringValue,则不会发生任何更改。

于 2013-07-26T19:23:45.067 回答
3

还有一种单行方法,只删除末尾的“.asm”,而不是字符串中间的任何“asm”:

stringValue = System.Text.RegularExpressions.Regex.Replace(stringValue,".asm$","");

"$" 匹配字符串的结尾。

要匹配 ".asm" 或 ".ASM" 或任何等效项,您可以进一步指定 Regex.Replace 以忽略大小写:

using System.Text.RegularExpresions;
...
stringValue = Regex.Replace(stringValue,".asm$","",RegexOptions.IgnoreCase);
于 2013-07-26T19:29:30.977 回答