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用加上面文章里的第二种方法,最终是可以的。感觉这个问题还有更优办法,留待后续解决,或哪位看到这篇文章后面有好办法了,留言告知下,多谢。

 

posted @ 2022-12-28 11:21  卡萨丁·周  阅读(1677)  评论(0编辑  收藏  举报