C#读取的字符串末尾无故出现换行导致路径语法无效
问题根因
你看到的闭合单引号前的换行,不是程序错误生成的,是你存储路径的File1本身自带的原始内容:
File.ReadAllText()的逻辑是完整读取文件的全部原始字节,转成字符串后原样返回,不会自动识别哪部分是路径、也不会自动剔除行尾的换行符。- 你把整个File1读出来的完整内容用单引号包裹输出到test.txt时,内容结构就是:开头的单引号 + File1的全部原始内容(路径行 + 路径行末尾的强制换行 + 空行 + 其他文本内容) + 结尾的单引号。自然你观察到的现象就是路径内容结束后,紧跟着文件自带的换行,最后才出现闭合的单引号。
为什么会触发“路径语法无效”报错
当你直接把File1的完整读取结果当做路径传入文件读写API时,字符串里包含的换行符是Windows路径规则明确禁止的非法字符,自然会触发路径格式校验失败的报错。
你之前删掉File1里其他多余内容就能正常运行,本质是因为你刚好没把多余的非法换行符带到路径参数里——哪怕你只留路径行,只要你把整行(连带行尾换行)直接当路径用,依然有概率触发格式报错。
适配保留多内容需求的解决方法
不需要修改File1的多内容结构,只要在提取路径的环节做针对性处理即可:
- 不要直接把整个文件的读取结果作为路径,改用
File.ReadAllLines()按行拆分内容,提取你需要的那行路径,并剔除行首尾的空白字符(包含换行符、空格、制表符)。
参考示例代码:// 读取File1的所有行内容 var file1Lines = File.ReadAllLines(file); // 提取第一行作为目标路径,清理掉首尾空白字符(含行尾换行) var targetPath = file1Lines[0].Trim(); // 使用清理后的合法路径读取目标文件内容 var targetFileContent = File.ReadAllText(targetPath); - 如果路径在File1中的位置不固定,可以遍历所有行,跳过空行,匹配到符合Windows路径格式(比如以盘符开头)的行再提取路径值,避免把其他文本内容误识别为路径。
- 你之前测试用
File.ReadAllBytes()得到完全一致的结果,是因为两种读取方法都是1:1还原文件的原始字节流,内容表现和读取方法本身无关。
内容的提问来源于stack exchange,提问作者zenof
相关产品推荐
相关产品推荐

