现在我正在尝试截取屏幕截图并将其保存到本地计算机,然后将其复制到网络驱动器中:
Q:\ 1234567890123456789012345 \ 123456789012 \ 12345 \屏幕截图\ sc.jpg
^关于有多少人物在说话的想法。我已经设置了在“12345”之后创建一个screenshots文件夹当程序到达时发生此错误:
我该如何避免这种情况?
此外:
DirectoryInfo scdestinfo = new DirectoryInfo(scdest);
DirectoryInfo scinfo = new DirectoryInfo(sccpath);
CopyAll(scinfo, scdestinfo);
这是我复制文件夹/文件的代码。
public void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
copyall = false;
try
{
//check if the target directory exists
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}//end if
//copy all the files into the new directory
foreach (FileInfo fi in source.GetFiles())
{
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
}//end foreach
//copy all the sub directories using recursion
foreach (DirectoryInfo diSourceDir in source.GetDirectories())
{
DirectoryInfo nextTargetDir = target.CreateSubdirectory(diSourceDir.Name);
CopyAll(diSourceDir, nextTargetDir);
}//end foreach
//success here
copyall = true;
}//end try
catch (IOException ie)
{
MessageBox.Show(ie.Message);
//handle it here
copyall = false;
}//end catch
}//end CopyAll
复制功能。
答案 0 :(得分:2)
遗憾的是,没有直接的方法可以避免这种情况。
解决方案1:最自然的一个:以不超过该限制的方式生成路径(更短的目录和文件名),或者只是重新组织目录布局(如果可能的话)。
解决方案2:不喜欢这个(有线,imo),但可以使用WindowsAPI
,在这种情况下不会失败,例如来自.NET 2.0 Workaround for PathTooLongException(它是2.0,但是有效)现在)
Solution3。 尝试,当您要读取/写入文件数据时,将操作系统光标移动到该目录,这样您就不需要指定完成(260+)来访问它,而只需要文件名。 你应该试一下,看看它是否适合你。 (即使这样可行,我更喜欢第一种解决方案,但值得尝试)
希望这有帮助。
答案 1 :(得分:2)
这是Windows limitation,尽管有许多API函数的Unicode变体允许最大路径长度大约为32,767个字符,但这又受到您正在处理的特定文件系统的限制。通常,给定路径组件限制为255个字符(对于给定卷的特定限制,请选中GetVolumeInformation)。
要使用允许更长路径的Unicode变体(例如CreateFileW),我相信您必须直接处理Windows API而不是使用.Net库函数。