我需要为文件的路径使用字符串,但有时在此字符串中有禁用的字符,我必须替换它们。例如,我的字符串_title是rumbaton jonathan \"racko\" contreras
。
我应该替换字符\
和"
。
我尝试了这个,但它不起作用:
_title.Replace(@"/", "");
_title.Replace(@"\", "");
_title.Replace(@"*", "");
_title.Replace(@"?", "");
_title.Replace(@"<", "");
_title.Replace(@">", "");
_title.Replace(@"|", "");
答案 0 :(得分:4)
由于字符串是不可变的,Replace
方法返回一个新字符串,它不会修改您调用它的实例。所以试试这个:
_title = _title
.Replace(@"/", "")
.Replace(@"""", "")
.Replace(@"*", "")
.Replace(@"?", "")
.Replace(@"<", "")
.Replace(@">", "")
.Replace(@"|", "");
此外,如果您要替换"
,请确保已正确转义。
答案 1 :(得分:2)
尝试正则表达式
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:&gt;&gt; a /:?“| li tt | le || la”mb。? 之后:玛丽有一只小羊羔。
同一篇文章的另一个答案更清晰
private static string CleanFileName(string fileName)
{
return Path.GetInvalidFileNameChars().Aggregate(fileName, (current, c) => current.Replace(c.ToString(), string.Empty));
}
答案 2 :(得分:0)
请参阅http://msdn.microsoft.com/cs-cz/library/fk49wtc1.aspx:
返回一个与当前字符串等效的字符串,但oldValue的所有实例都替换为newValue。
答案 3 :(得分:0)
我已经编写了一个方法来执行您想要的精确操作并使用更清晰的代码。
public static string Delete(this string target, string samples) {
if (string.IsNullOrEmpty(target) || string.IsNullOrEmpty(samples))
return target;
var tar = target.ToCharArray();
const char deletechar = '♣'; //a char that most likely never to be used in the input
for (var i = 0; i < tar.Length; i++) {
for (var j = 0; j < samples.Length; j++) {
if (tar[i] == samples[j]) {
tar[i] = deletechar;
break;
}
}
}
return tar.ConvertToString().Replace(deletechar.ToString(CultureInfo.InvariantCulture), string.Empty);
}
var input = "rumbaton jonathan \"racko\" contreras";
var cleaned = input.Delete("\"\\/*?><|");
将导致:
rumbaton jonathan racko contreras
答案 4 :(得分:0)
或者你可以尝试这种(可能非常低效)的方法:
string inputString = @"File ~!@#$%^&*()_+|`1234567890-=\[];',./{}:""<>? name";
var badchars = Path.GetInvalidFileNameChars();
foreach (var c in badchars)
inputString = inputString.Replace(c.ToString(), "");
结果将是:
File ~!@#$%^&()_+`1234567890-=[];',.{} name
但是在运行foreach循环之前,可以随意向badchars
添加更多字符。
答案 5 :(得分:0)
好的!由于你的所有迹象,我已经解决了我的问题。这是我的更正:
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);
}
非常感谢大家:)