C# 当部分路径不存在时,File.Create()方法失败

C# 当部分路径不存在时,File.Create()方法失败,c#,createfile,C#,Createfile,作为project练习的一部分,我一直在编写一个简单的控制台应用程序。任务相当简单: 第二种方法必须创建嵌套目录树,其中每个文件夹名称都是Guid 第三种方法必须将空文件放在特定级别的所选目录树中 我的主要问题在于第三种方法。因为当它工作正常并创建文件“直到任何目录的第三级”时,超过这一点它总是抛出“System.IO.DirectoryNotFoundException”,因为它“找不到路径的一部分”。 我使用字符串作为路径的容器,但由于它很少设置Guid,所以它变得相当长。我在创建目录时遇到

作为project练习的一部分,我一直在编写一个简单的控制台应用程序。任务相当简单:

第二种方法必须创建嵌套目录树,其中每个文件夹名称都是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);
}
string ChosenDirectoryPath=currDir.FullName+@“\”;

对于(int i=0;i您的问题是
File.Create
不会为您创建相应的目录,而是抛出
System.IO.DirectoryNotFoundException

您必须自己创建这些目录,使用


如果由于路径过长而发生此异常,您仍然可以像创建目录时一样使用“长路径语法(\\?\)”


另请参见此问题:还有一个很好的链接

您的问题是
文件。Create
不会为您创建相应的目录,而是抛出一个
System.IO.DirectoryNotFoundException

您必须自己创建这些目录,使用


如果由于路径过长而发生此异常,您仍然可以像创建目录时一样使用“长路径语法(\\?\)”


另请参见此问题:还有一个很好的链接

currDir.FullName++“\”++“\blank.txt”,它不会在路径上为您提供两个\。您应该使用path.Combine(path1,path2)来遍历合并路径,如果两个路径都包含“\”则可以复制“\”感谢您指出,一旦我弄明白如何使用它,我会尝试,但现在我更关心的是我实现它的方式是否有效,但只适用于深度不超过3rd folder.currDir.FullName++“\”++“\blank.txt”的目录,这不会在路径上为您提供两个\吗?您应该使用path.Combine(路径1,路径2)如果两条路径都包含“\”,则可以复制合并路径和“\”谢谢你指出,一旦我弄明白如何使用它,我会尝试,但现在我更关心的是我实现它的方式,但只适用于深度不超过第三个文件夹的目录。谢谢你的回答,但这些目录是由另一种方法创建的,我没有在这里发布。这种方法使用
System.IO.Directory.CreateDirectory()
正如您所建议的,我实际上可以创建一些文件,但只能在嵌套深度不超过3级的目录中创建。当我遇到异常时,它会向我显示创建此文件的位置的准确路径,只是它没有创建它。即使我手动给出路径,它仍然会抛出错误。@Raczy这很奇怪,因为你提到的路径没有超出任何限制。我尝试了
文件。使用完全相同的路径创建
,一切对我来说都很好。你100%确定所有目录都存在吗?我再次仔细查看了整个路径,一切似乎都很好。我决定手动创建,一步一步地创建每个文件。因此,第一次还是这样ee嵌套文件一切正常。正在通过复制粘贴进行操作,并使用文件资源管理器检查路径是否相同,然后再次出现相同的问题。在第4和第5个嵌套目录中引发不完整路径异常(VS处于管理模式).我想我会通过的。也许这只是我个人的问题。但这似乎很奇怪。无论如何,谢谢你的帮助efford@Raczy我查看了你的github存储库,在那里找到了你的源代码,在此基础上我编辑了我的答案,希望能帮助你。这是一个真正的英雄,非常感谢你的努力!谢谢你的支持wer,但是这些目录是由另一个方法创建的,我没有在这里发布。这个方法使用
System.IO.Directory.CreateDirectory()
正如您所建议的,我实际上可以创建一些文件,但只能在嵌套深度不超过3级的目录中创建。当我遇到异常时,它会向我显示创建此文件的位置的准确路径,只是它没有创建它。即使我手动给出路径,它仍然会抛出错误。@Raczy这很奇怪,因为你提到的路径没有超出任何限制。我尝试了
文件。使用完全相同的路径创建
,一切对我来说都很好。你100%确定所有目录都存在吗?我再次仔细查看了整个路径,一切似乎都很好。我决定手动创建,一步一步地创建每个文件。因此,第一次还是这样ee嵌套文件一切正常。正在通过复制粘贴进行操作,并使用文件资源管理器检查路径是否相同,然后再次出现相同的问题。在第4和第5个嵌套目录中引发不完整路径异常(VS处于管理模式).我想我会通过的。也许这只是我个人的问题。但这似乎很奇怪。无论如何,谢谢你的帮助efford@Raczy我查看了你的github存储库,在那里找到了你的源代码,在此基础上我编辑了我的答案,希望能帮助你。这是一个真正的英雄,非常感谢你的努力!
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);
}