C#中Substring方法触发超出范围异常的问题排查
问题出在
Substring的参数理解上哦! 嘿,我来帮你捋清楚这个问题~你的代码抛出异常,核心原因是对Substring方法的参数用法搞错了:
问题分析
string.Substring(int startIndex, int length)的第二个参数是你要截取的字符串长度,而不是原字符串的总长度。你现在传了fl也就是整个路径的长度(83),但从索引47开始,剩下的字符长度只有83 - 47 = 36,传83远远超过了可用的字符数,自然会触发ArgumentOutOfRangeException异常。
修正方案
有两种简单的修正方式:
- 计算正确的截取长度:
int idx = file.LastIndexOf('\\'); int filenameLength = file.Length - idx; string filename = file.Substring(idx, filenameLength);
- 直接省略第二个参数,
Substring会自动从起始索引截取到字符串末尾:
int idx = file.LastIndexOf('\\'); string filename = file.Substring(idx);
更健壮的替代方法
其实不用自己手动截取,.NET已经提供了专门处理路径的工具类,用System.IO.Path.GetFileName(file)就能直接获取文件名,它会自动处理不同系统的路径分隔符,还能兼容路径末尾带\的特殊情况,比手动截取靠谱多啦!
内容的提问来源于stack exchange,提问作者user9470599
相关产品推荐
相关产品推荐

