【发布时间】:2019-05-27 14:55:00
【问题描述】:
作为项目练习的一部分,我一直在编写一个简单的控制台应用程序。任务相当简单:
第二种方法必须创建嵌套目录树,其中每个文件夹名称都是 Guid。
第三种方法必须将空文件放在特定级别的选定目录树中。
我的主要问题在于第三种方法。因为虽然它可以正常工作并创建文件直到任何目录的第三级,但在此之后它总是抛出 "System.IO.DirectoryNotFoundException" - 因为它“找不到路径的一部分”。
我使用字符串作为路径的容器,但是由于它很少设置 Guid,所以它变得很长。我在创建目录时遇到了类似的问题,但为了工作,我必须简单地将 @"\?\" 前缀放在路径后面。那么有什么方法可以让它工作,或者可以解决这个问题?
这是失败的方法。具体来说是
File.Create(PathToFile + @"\blank.txt").Dispose();
以及生成字符串并调用它的部分代码:
string ChosenDirectoryPath = currDir.FullName + @"\";
for (int i = 0; i <= Position; i++)
{
ChosenDirectoryPath += ListsList[WhichList][i];
}
if (!File.Exists(ChosenDirectoryPath + @"\blank.txt"))
{
FileMaker(ref ChosenDirectoryPath);
}
编辑:
具体来说,目录是按方法制作的:
public List<string> DirectoryList = new List<string>();
internal static List<List<string>> ListsList = new List<List<string>>();
private static DirectoryInfo currDir = new DirectoryInfo(".");
private string FolderName;
private static string DirectoryPath;
public void DeepDive(List<string> DirectoryList, int countdown)
{
FolderName = GuidMaker();
DirectoryList.Add(FolderName + @"\");
if (countdown <= 1)
{
foreach (string element in DirectoryList)
{
DirectoryPath += element;
}
Directory.CreateDirectory(@"\\?\" + currDir.FullName + @"\" + DirectoryPath);
Console.WriteLine("Folders were nested at directory {0} under folder {1}\n", currDir.FullName, DirectoryList[0]);
ListsList.Add(DirectoryList);
DirectoryPath = null;
return;
}
DeepDive(DirectoryList, countdown-1);
}
由于递归,这很混乱(迭代会更好,但我想这样做是为了学习一些东西)。重点是创建目录并将其存储在列表列表中。
创建文件可以正常工作,但仅适用于前三个嵌套文件夹。所以问题是它以某种方式丢失了它在第 4 和第 5 级的文件路径,甚至无法手动制作这些文件。会不会是路太长了?以及如何解决这个问题。
这是抛出的异常:
System.IO.DirectoryNotFoundException: „找不到路径的一部分 “C:\ \ More \ folorers \ 1b0c7715-EE01-4DF8-9079-82A7990030F \ C6C806B0-B69D-4A3A-88D0-1BD8A0E31EB2 \ 9671F2B3-3041-42D5-B631-4719D36C2AC5 \ 6406F00F-7750-4B5A-A45D-CEBCECB0B70E \ bcacef2b-e391-4799-b84e-f2bc55605d40\blank.txt”。”
所以它抛出了文件的完整路径,却说找不到。
【问题讨论】:
-
currDir.FullName + @"\" + @"\blank.txt" 不会在你的路径上给你两个 \ 吗?您应该使用 Path.Combine(path1,path2) 来合并路径和如果两个路径都包含“\”则可以复制的“\”
-
感谢您指出,一旦我弄清楚如何使用它,我会尝试,但现在我更关心的是我实现它的方式,但只有对于不超过第三个文件夹的目录。
标签: c# createfile