C#中Substring返回错误值,如何正确去除文件扩展名?
问题分析与解决方案
看起来你代码里犯了一个小的变量名错误,另外手动截取路径字符串也不是最稳妥的做法,我来帮你解决:
问题根源
你当前的代码里用了dcpFile.LastIndexOf('.')来确定截取位置,但你的目标路径变量是newEncodedFiles——这明显是变量名写错了!这就导致程序去查找dcpFile这个变量里最后一个点的位置,而不是你实际需要的newEncodedFiles路径,所以才得到了错误的macro结果。
解决方案1:修正变量名
如果坚持用手动截取的方式,只需要把变量名改对就行:
var newEncodedFiles = @"C:\Users\wande\OneDrive\Documentos\Visual Studio 2019\Spira\Spira\bin\Debug\netcoreapp5.0\Translated\master\new_uspc\menu\macrodic.dcp"; // 把dcpFile改成newEncodedFiles,匹配你的目标路径变量 var newPath = newEncodedFiles.Substring(0, newEncodedFiles.LastIndexOf('.'));
这样就能得到你期望的C:\Users\wande\OneDrive\Documentos\Visual Studio 2019\Spira\Spira\bin\Debug\netcoreapp5.0\Translated\master\new_uspc\menu\macrodic了。
解决方案2:使用.NET内置的Path类**(推荐)**
手动截取字符串很容易踩坑,比如文件名里有多个点(比如my.file.dcp)或者路径文件夹名带点的情况。用.NET的Path类方法更可靠,专门处理文件路径的各种边界情况:
var newEncodedFiles = @"C:\Users\wande\OneDrive\Documentos\Visual Studio 2019\Spira\Spira\bin\Debug\netcoreapp5.0\Translated\master\new_uspc\menu\macrodic.dcp"; // 方式1:组合目录名和无扩展名的文件名 var newPath = Path.Combine(Path.GetDirectoryName(newEncodedFiles), Path.GetFileNameWithoutExtension(newEncodedFiles)); // 方式2:更简洁的写法,直接移除扩展名 var newPath = Path.ChangeExtension(newEncodedFiles, null);
这两种方式都能稳定得到你想要的结果,而且不用担心复杂路径的问题。
内容的提问来源于stack exchange,提问作者Rhadamants TriboGamer
相关产品推荐
相关产品推荐

