路径超过260字符,不能采用普通的Copy等函数了。
使用如下的代码:
/// <summary> /// 长文件名的文件拷贝 /// </summary> /// <param name="source"></param> /// <param name="target"></param> /// <param name="overwrite"></param> [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool CopyFile(string source, string target, bool overwrite); public static void Copy(string source, string target, bool overwrite) { string formattedName_source = @"\?" + source; string formattedName_target = @"\?" + target; // CopyFile 第三个参数是 FALSE 的时候自动覆盖 所以写成 !overwrite // 参见 http://msdn.microsoft.com/en-us/library/aa363851(v=vs.85).aspx bool v = CopyFile(formattedName_source, formattedName_target, !overwrite); }
注意:只支持本地路径,不支持带IP地址的网络路径
参考资料
http://blogs.msdn.com/b/bclteam/archive/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton.aspx
http://msdn.microsoft.com/en-us/library/aa363851(v=vs.85).aspx