【发布时间】:2011-04-19 00:48:36
【问题描述】:
我的数据来自通过 EF3.5 的 SQL 服务器数据库的 nvarchar 字段。此字符串用于创建文件名,需要删除无效字符并尝试以下选项,但它们都不起作用。请提出为什么这是一个可以理解的谜团?我做错什么了吗?
我浏览了该网站上几乎所有相关问题.. 现在发布一个综合问题,来自其他类似问题的所有建议/答案。
UPD:问题无关。所有这些选项都有效。所以把它发布到社区维基。
public static string CleanFileName1(string filename)
{
string file = filename;
file = string.Concat(file.Split(System.IO.Path.GetInvalidFileNameChars(), StringSplitOptions.RemoveEmptyEntries));
if (file.Length > 250)
{
file = file.Substring(0, 250);
}
return file;
}
public static string CleanFileName2(string filename)
{
var builder = new StringBuilder();
var invalid = System.IO.Path.GetInvalidFileNameChars();
foreach (var cur in filename)
{
if (!invalid.Contains(cur))
{
builder.Append(cur);
}
}
return builder.ToString();
}
public static string CleanFileName3(string filename)
{
string regexSearch = string.Format("{0}{1}",
new string(System.IO.Path.GetInvalidFileNameChars()),
new string(System.IO.Path.GetInvalidPathChars()));
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
string file = r.Replace(filename, "");
return file;
}
public static string CleanFileName4(string filename)
{
return new String(filename.Except(System.IO.Path.GetInvalidFileNameChars()).ToArray());
}
public static string CleanFileName5(string filename)
{
string file = filename;
foreach (char c in System.IO.Path.GetInvalidFileNameChars())
{
file = file.Replace(c, '_');
}
return file;
}
【问题讨论】:
-
“它们都不起作用”是什么意思?
-
返回的字符串仍然包含无效字符。没有删除 System.IO.Path.GetInvalidFileNameChars() 返回的无效字符。
-
如果您向我们展示一个无效输入的示例,这将得到最好的解释。
-
上述所有函数都适用于来自数据库的 char 或 varchar 字段的字符串。但不适用于来自 nvarchar 字段的字符串。和编码有关吗?
-
@Dan .. 字符串按原样返回...没有使用上述任何函数删除任何字符。