我有以下c#方法从提议的名称中获取有效的文件名:
public static string GetValidFilename(string fileNameCandidate)
{
var invalids = System.IO.Path.GetInvalidFileNameChars();
var _name = fileNameCandidate.ToCharArray();
var validName = _name.Except(invalids).ToArray();
return new string(validName);
}
Run Code Online (Sandbox Code Playgroud)
我所期望的是原始名称,其中删除了残留的无效字符.但是,我得到的是具有无效文件名字符的原始名称和其他删除的名称.
例如,如果我使用"ems:almcc_srr_view"作为输入参数调用方法,我期望"emsalmcc_srr_view作为输出.我得到的是"emsalc_rviw"作为输出.我错过了什么?
Enumerable.Except()产生两个序列的"集合差异" - 这意味着输入中的重复字符也将被消除.
你想要的是:
_name.Where( x => !invalids.Contains(x) ).ToArray();
Run Code Online (Sandbox Code Playgroud)
由于System.StringIS IEnumerable<char>,可以简化这:
var name = fileNameCandidate.Where( x => !invalids.Contains(x) ).ToArray() );
return new string( name );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |