只是想知道是否有Directory.CreateDirectory()
的替代方法,因为我正在尝试创建一个超过260个字符的目录,尽管文件名不长但是目录路径是。
OR
如果有任何技巧我可以指示CreateDirectory
在此位置创建文件夹而不提供完整的目录路径。当我在文件夹中创建文件夹等等时。必须有一些合法的方法来做到这一点。
我现在保存在隐藏标签中的字符串存在问题所以它不再是问题了。
答案 0 :(得分:2)
另一种方法是使用DirectoryInfo
类和方法DirectoryInfo.Create
。
我没有尝试过,但MSDN表明当你使用太长的路径时它不会抛出异常。
修改强>
此外,我找到了一些可以帮助您解决问题的方法。看看this code
答案 1 :(得分:2)
将目录设置为current和create directory。
Directory.SetCurrentDirectory(@"c:\sample");
Directory.CreateDirectory("test");
答案 2 :(得分:2)
简单的解决方案是将使用未启用的路径,将允许最多约32767个字符的文件路径
string longPathEnabledFileName = Path.ToLongPath("C:\SomeVeryLongPath\....");
FileStream fs = new FileStream(longPathEnabledFileName);
这只是在路径前面加上\\?\,它告诉框架绕过260个字符的MAX_PATH限制。 很遗憾,在撰写本文时(。从4.0版开始),.Net中的\ strong?不支持的前缀
这使我们得到一个WinApi解决方案并引用Kernel32.dll来使用SafeFileHandle。来自BCL团队的Kim Hamilton在此处发布了一系列有关MAX_PATH限制的解决方法(第2部分展示了如何使用winapi函数),其中包含的代码片段仅供参考:
// This code snippet is provided under the Microsoft Permissive License. using System; using System.IO; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] internal static extern SafeFileHandle CreateFile( string lpFileName, EFileAccess dwDesiredAccess, EFileShare dwShareMode, IntPtr lpSecurityAttributes, ECreationDisposition dwCreationDisposition, EFileAttributes dwFlagsAndAttributes, IntPtr hTemplateFile); public static void TestCreateAndWrite(string fileName) { string formattedName = @"\\?\" + fileName; // Create a file with generic write access SafeFileHandle fileHandle = CreateFile(formattedName, EFileAccess.GenericWrite, EFileShare.None, IntPtr.Zero, ECreationDisposition.CreateAlways, 0, IntPtr.Zero); // Check for errors int lastWin32Error = Marshal.GetLastWin32Error(); if (fileHandle.IsInvalid) { throw new System.ComponentModel.Win32Exception(lastWin32Error); } // Pass the file handle to FileStream. FileStream will close the // handle using (FileStream fs = new FileStream(fileHandle, FileAccess.Write)) { fs.WriteByte(80); fs.WriteByte(81); fs.WriteByte(83); fs.WriteByte(84); } }
还有一个库将所有这些工作封装在名为zeta long paths的谷歌代码中
答案 3 :(得分:1)
如何使用'\'字符拆分您的预期路径,然后循环遍历每个项目,查看目录是否存在,如果不存在 - 创建它,然后使用
Directory.SetCurrentDirectory(directoryName);