win10代码长路径操作

之前有说过在win10下启用长路径的问题问题 win10下长路径异常,但是在unity的项目里,还是有些代码在堆长路径有异常的!

路径的问题

在默认的情况下,使用的通常是相对目录或者是类似c:/some/some1/name.txt这样的路径,但是当路径超过260的时候,基本所有操作结果返回的都是Could not find a part of the path!

https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd

官方给了这样的解决方案\\?\!

但是有几个注意事项:

  • 所有的/都必须转换成 \
  • 必须是完整的路径,eg:E:\a\b\c.txt
  • 不能有..之类的目录转换

判定文件是否存在

// 常用方式
File.Exists(dstPath)
// 长路径
var f = new FileInfo(dstPath);
f.Exists

删除文件

// 常用方式
File.Delete(newdstPath);
// 长路径
var f = new FileInfo(newdstPath);
if(f.Exists)
    f.Delete();

移动文件文件

// 常用方式
File.Move(srcPath, dstPath);
// 长路径
// 长路径的转换
string newdstPath = $"//?/{dstPath}";
newdstPath = newdstPath.Replace("/", "\\");
string newsrcPath = $"//?/{srcPath}";
newsrcPath = newsrcPath.Replace("/", "\\");
File.Move(newsrcPath, newdstPath);