目前想做的事情如下: 从一个网络路径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);
}
}
目前用的取代方法是直接调用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);
}
}
public static extern int GetShortPathName(string path, StringBuilder shortPath, int shortPathLength);
转成短文件名.
是的,把copy转成一个读和一个写的操作。