我最近一直在将各种位置的MP3转移到存储库中.我一直使用ID3标签构建新的文件名(谢谢,TagLib-Sharp!),我注意到我得到了一个System.NotSupportedException:
"不支持给定路径的格式."
这是通过产生任一File.Copy()或Directory.CreateDirectory().
没过多久就意识到我的文件名需要消毒.所以我做了一件显而易见的事:
public static string SanitizePath_(string path, char replaceChar)
{
string dir = Path.GetDirectoryName(path);
foreach (char c in Path.GetInvalidPathChars())
dir = dir.Replace(c, replaceChar);
string name = Path.GetFileName(path);
foreach (char c in Path.GetInvalidFileNameChars())
name = name.Replace(c, replaceChar);
return dir + name;
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我继续得到例外.原来,':'不在集合中Path.GetInvalidPathChars(),因为它在路径根中有效.我认为这是有道理的 - 但这必须是一个非常普遍的问题.有没有人有一些消毒路径的短代码?最彻底的我已经想到了这一点,但感觉它可能是矫枉过正.
// replaces invalid characters with replaceChar
public static string SanitizePath(string path, char replaceChar)
{
// construct a list of characters that can't show up in filenames. …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种简单的方法来编码/转义和解码/ unescape文件路径(文件路径中的非法字符"\/?:<>*| )
HttpUtiliy.UrlEncode做它的工作,除了它不编码*字符.
我所能找到的只是用正则表达式逃脱,或者只是替换非法的字符 _
我希望能够一致地编码/解码.
我想知道是否有预先定义的方法来做到这一点,或者我只需要编写一些代码进行编码,另一部分需要解码.
谢谢