日期:2014-05-18  浏览次数:20986 次

如何写C#程序copy路径很长的文件
目前想做的事情如下: 从一个网络路径copy某个目录下面所有的文件,用的是递归调用FileInfo.CopyTo()方法,但是问题是路径可能有十多层,加上一个长文件名后就会超过248个字符的限制,比如copy \\csddf\dsaf\asdf\asdf\sdkj\.......\asdfdsa\adsfs\dsafa\122323-34324-3432432.txt 这样的文件FileInfo.CopyTo()就会抛出文件名太长的exception。参考的一段网上来的代码如下,不知道怎么改代码才能对付这种长文件+路径的情况呢?
目前用的取代方法是直接调用xcopy,但是希望有个c#实现的解决方法。谢谢各位大侠。。。


  public static void Copy(string sourceDirectory, string targetDirectory)
  {
  DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
  DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);

  CopyAll(diSource, diTarget);
  }

  public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
  {
  // Check if the target directory exists, if not, create it.
  if (Directory.Exists(target.FullName) == false)
  {
  Directory.CreateDirectory(target.FullName);
  }

  // Copy each file into it's new directory.
  foreach (FileInfo fi in source.GetFiles())
  {
  Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
  fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
  }

  // Copy each subdirectory using recursion.
  foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
  {
  DirectoryInfo nextTargetSubDir =
  target.CreateSubdirectory(diSourceSubDir.Name);
  CopyAll(diSourceSubDir, nextTargetSubDir);
  }
  }


------解决方案--------------------
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(string path, StringBuilder shortPath, int shortPathLength); 


转成短文件名.
------解决方案--------------------
探讨
不能自己按字节流读出,再保存吗?