Kee*_*ker 7 linux windows ubuntu operating-system .net-core
我正在构建一个可以在 Windows 和 Ubuntu 系统上运行的 .Net Core 2.0 控制台应用程序。我有一个需要转换为安全文件名的字符串。目前我正在使用以下代码来实现这一点:
var safeName = string.Join("-", name.Split(Path.GetInvalidFileNameChars()));
它可以工作,但它会在不同的操作系统上产生不同的结果,因为 Linux 允许 Windows 不允许的字符。我喜欢在所有系统上产生相同结果的解决方案。
是否有跨平台版本GetInvalidFileNameChars会返回所有平台的字符?
我认为 BCL 中没有“跨平台”版本,但是您可以通过复制Windows 版本的 GetInvalidFileNameChars轻松地自己制作一个版本,因为Unix 版本只是这些版本的子集,并且它们不太可能经常改变:
public static char[] GetInvalidFileNameChars() => new char[]
{
'\"', '<', '>', '|', '\0',
(char)1, (char)2, (char)3, (char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)10,
(char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20,
(char)21, (char)22, (char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, (char)30,
(char)31, ':', '*', '?', '\\', '/'
};
Run Code Online (Sandbox Code Playgroud)
看起来以下内容会起作用:
var invalidCharStr =
//printable chars linux/unix
"/" +
//unprintable chars linux/unix
Convert.ToChar(0) +
//printable chars Windows
@"><:""/\|?*" +
//unprintable chars Windows: 0-31
new string(Enumerable.Range(0, 32).Select(Convert.ToChar).ToArray());
Run Code Online (Sandbox Code Playgroud)
将它们作为数组,例如:
var invalidChars = invalidCharStr.ToArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |