C#提示指定的路径或文件名太长问题解决办法
我用的是.net 4.0的环境,直接在app.config配置文件中加几行配置就行。如下图:
<configuration> <runtime> <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" /> </runtime> </configuration>
加的这行配置的意思:网上查了下:
加上之后是不是感觉搞定了,NO,应该只是Path.GetDirectoryName和Path.GetPathRoot这两个方法可以了(不太确定是否只是这两个可以)。反正我试了File.Copy这个方法还是不行,一直报找不到文件的一部分,开始以为是没创建路径文件夹,结果发现文件夹都有,最终确定还是字符太长的问题,晕,不知道是我哪里没操作好,还是怎么得,最终没找到相关的配置解决。
在此之前我试过加前缀\\?\不行,好像还得调用window api unicode版本才行,开始没太明白,试了下上面的配置可以,就没有继续往下试加前缀这个办法。
现在Copy不行,没办法继续搞吧,最终参考了这篇文章中的其中一个办法。具体可参考:https://www.cnblogs.com/xuezhu/p/14955465.html。
用的就是上面文章里的第二个方法,里面重新写了copy方法,看了下原理还是完整路径前加\\?\前缀,再调用unicode版的win api,哭死,绕了一圈又回来了。本想着不用上面的配置了,都采用这种办法,结果没找到GetDirectoryName这个方法,作者说没有的自己加上,但我查了win api,没找到和这个方法对应的函数,没加上。
最终我把这两个方法结合用了,配置解决GetDirectoryName这个方法,Copy用加上面文章里的第二种方法,最终是可以的。感觉这个问题还有更优办法,留待后续解决,或哪位看到这篇文章后面有好办法了,留言告知下,多谢。