C# 如何修剪/替换字符'\';或'&引用';从一根绳子?

C# 如何修剪/替换字符'\';或'&引用';从一根绳子?,c#,C#,我需要使用一个字符串作为文件的路径,但有时这个字符串中有禁止的字符,我必须替换它们。例如,我的字符串标题是rumbaton jonathan\'racko\'conteras 嗯,我应该替换字符\和“ 我试过这个,但不起作用: _title.Replace(@"/", ""); _title.Replace(@"\", ""); _title.Replace(@"*", ""); _title.Replace(@"?", ""); _title.Replace(@"<", ""); _ti

我需要使用一个字符串作为文件的路径,但有时这个字符串中有禁止的字符,我必须替换它们。例如,我的字符串标题是
rumbaton jonathan\'racko\'conteras

嗯,我应该替换字符
\

我试过这个,但不起作用:

_title.Replace(@"/", "");
_title.Replace(@"\", "");
_title.Replace(@"*", "");
_title.Replace(@"?", "");
_title.Replace(@"<", "");
_title.Replace(@">", "");
_title.Replace(@"|", "");
\标题。替换(@“/”,“”);
_标题.替换(@“\”,“”);
_标题.替换(@“*”,“”);
_标题.替换(@“?”,“);
_标题.替换(@“);
_标题.替换(@“|”和“”);

由于字符串是不可变的,
Replace
方法返回一个新字符串,它不会修改正在调用它的实例。因此请尝试以下操作:

_title = _title
    .Replace(@"/", "")
    .Replace(@"""", "")
    .Replace(@"*", "")
    .Replace(@"?", "")
    .Replace(@"<", "")
    .Replace(@">", "")
    .Replace(@"|", "");
\u title=\u title
.替换(@“/”,“”)
.替换(@“”,“”)
.替换(@“*”,“”)
.替换(@“,”)
.替换(@“”)
.替换(@“|”和“”);
另外,如果要替换
,请确保已正确转义它。

请参阅:

返回与当前字符串等效的字符串,但oldValue的所有实例均替换为newValue

试试正则表达式

string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
illegal = r.Replace(illegal, "");
在“M”\a/ry/h**ad:>>a/:?“| litt | le | la”mb。? 玛丽生了一只小羊羔

同样,来自同一篇文章的另一个答案更为清晰

private static string CleanFileName(string fileName)
{
    return Path.GetInvalidFileNameChars().Aggregate(fileName, (current, c) => current.Replace(c.ToString(), string.Empty));
}

中,我编写了一个方法来执行您想要的精确操作,并且代码更加简洁

方法
公共静态字符串删除(此字符串目标,字符串示例){
if(string.IsNullOrEmpty(目标)| | string.IsNullOrEmpty(示例))
回报目标;
var tar=target.ToCharArray();
常量char deletechar=♣'; //很可能永远不会在输入中使用的字符
对于(变量i=0;i
样品
var input=“伦巴顿乔纳森\”拉科\“孔特雷拉斯”;
var cleaned=input.Delete(“\”\\/*?>),或者您可以尝试以下方法(可能效率极低):


但是,在运行foreach循环之前,可以在
坏字符中添加更多字符。

好的!由于您的指示,我已经解决了我的问题。这是我的更正:

string newFileName = _artist + " - " + _title;
char[] invalidFileChars = Path.GetInvalidFileNameChars();
char[] invalidPathChars = Path.GetInvalidPathChars();
foreach (char invalidChar in invalidFileChars)
{
        newFileName = newFileName.Replace(invalidChar.ToString(), string.Empty);
}
foreach (char invalidChar in invalidPathChars)
{
        newFilePath = newFilePath.Replace(invalidChar.ToString(), string.Empty);
}

谢谢大家:)

哪种语言?JAVACVB?字符串在.NET中是不可变的。此外,您永远不会替换
“\”
…始终基于
Path.GetInvalidFileNameChars()描述“它不起作用”这一有用的答案
是一个小错误,请看我的评论;pOh是的。真的很好。我也会尝试一下!谢谢你的耐心!一定要看第二个答案,更干净。@Henkholtman没有第一、第二或任何顺序的答案,它们是按投票数排序的,这取决于change@user1306322如果你比较一下每个answe的时间r并查找最老的>youngest@DGibbs很快就很难做到这一点,因为会议记录将不可见,我怀疑任何人都不会费心直观地比较发布日期。除非他们真的想知道这里发生了什么。@DGibbs哦,你说得对!这个最古老的问题几乎所有发布的answ都有确切的日期急诊室:谢谢,我就是这么做的(回答上;)
var input = "rumbaton jonathan \"racko\" contreras";
var cleaned = input.Delete("\"\\/*?><|");
string inputString = @"File ~!@#$%^&*()_+|`1234567890-=\[];',./{}:""<>? name";
var badchars = Path.GetInvalidFileNameChars();
foreach (var c in badchars)
    inputString = inputString.Replace(c.ToString(), "");
File ~!@#$%^&()_+`1234567890-=[];',.{} name
string newFileName = _artist + " - " + _title;
char[] invalidFileChars = Path.GetInvalidFileNameChars();
char[] invalidPathChars = Path.GetInvalidPathChars();
foreach (char invalidChar in invalidFileChars)
{
        newFileName = newFileName.Replace(invalidChar.ToString(), string.Empty);
}
foreach (char invalidChar in invalidPathChars)
{
        newFilePath = newFilePath.Replace(invalidChar.ToString(), string.Empty);
}