You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#控制台程序获取含空格用户输入路径时触发非法字符错误

解决C#控制台粘贴含空格路径触发非法字符的问题

嘿,我懂你遇到的这个小麻烦——在控制台里粘贴带空格的路径时触发“非法字符”错误,这其实是个挺常见的场景,多半是粘贴过程中附带了隐藏空白字符或者多余的双引号(比如从文件管理器复制带空格的路径时,系统会自动给路径套上双引号),这些额外字符会被DirectoryInfo判定为非法路径字符。下面是具体的解决思路和代码调整方案:

第一步:先把输入的路径“洗干净”

对用户输入的路径字符串做两个关键处理:

  • Trim()去掉路径前后的所有空白字符(包括不小心粘进来的换行符、制表符、多余空格)
  • Replace("\"", "")移除路径首尾可能存在的双引号(很多时候复制带空格的路径会自动带上引号,比如"C:\My Folder",这时候引号就是非法字符)

调整后的完整代码示例

Console.WriteLine("请输入目标路径:");
// 处理输入:空值判断+去空白+去引号
string inputPath = Console.ReadLine()?.Trim().Replace("\"", "") ?? string.Empty;

// 先校验输入是否为空
if (string.IsNullOrWhiteSpace(inputPath))
{
    Console.WriteLine("路径不能为空哦");
    return;
}

try
{
    DirectoryInfo dirInfo = new DirectoryInfo(inputPath);
    var files = dirInfo.GetFiles();
    Console.WriteLine($"成功找到 {files.Length} 个文件");
}
catch (ArgumentException ex)
{
    Console.WriteLine($"路径包含非法字符:{ex.Message}");
}
catch (DirectoryNotFoundException ex)
{
    Console.WriteLine("抱歉,这个路径不存在:" + ex.Message);
}

额外排查小技巧

如果还是报错,可以试试这些方法定位问题:

  • 检查路径里有没有全角空格或者中文特殊符号,这类字符也会被判定为非法,可以手动替换成全角空格为半角
  • 打印输入的原始字符细节,看看是不是有隐藏的奇怪字符:
    Console.WriteLine($"输入内容的长度:{inputPath.Length}");
    foreach (char c in inputPath)
    {
        Console.WriteLine($"字符:'{c}',ASCII编码:{(int)c}");
    }
    

通过这个小代码,你就能清楚看到是不是有换行符、不可见字符在搞鬼啦!

内容的提问来源于stack exchange,提问作者andrepogg

火山引擎 最新活动