【问题标题】:C# get all parent directories from a path up to a point?C#从一个路径获取所有父目录到一个点?
【发布时间】:2011-06-09 01:33:43
【问题描述】:

我在 WPF 中有一个列表框,它会自动获取框中列出的文件的全名,然后将这些文件添加到其特定文件夹下的 Zip 中。

例如:

C:\ProgramFiles\Folder1\Folder2\Folder3\Folder4\file.txt

我需要能够将其压缩到其文件夹中,直到特定文件夹,例如仅

\Folder2\Folder3\Folder4\file.txt

我怎么能这样做?我试过获取父目录,但它只返回文件所在的目录。

【问题讨论】:

    标签: wpf c#-4.0


    【解决方案1】:
        private static IEnumerable<DirectoryInfo> GetAllParentDirectories(DirectoryInfo directoryToScan)
        {
            Stack<DirectoryInfo> ret = new Stack<DirectoryInfo>();
            GetAllParentDirectories(directoryToScan, ref ret);
            return ret;
        }
    
        private static void GetAllParentDirectories(DirectoryInfo directoryToScan, ref Stack<DirectoryInfo> directories)
        {
            if (directoryToScan == null || directoryToScan.Name == directoryToScan.Root.Name) 
                return;
    
            directories.Push(directoryToScan);
            GetAllParentDirectories(directoryToScan.Parent, ref directories);
        }
    

    【讨论】:

      【解决方案2】:

      您可以根据需要使用 DirectoryInfo 对象在链中向上获取父级。如果你想获得三层以上的父目录,你可以这样做:

      DirectoryInfo di = new DirectoryInfo(@"C:\ProgramFiles\Folder1\Folder2\Folder3\Folder4\file.txt");
              for(int i = 0; i<3; i++){
                  di = di.Parent;
              }
      

      显然,您可以更改停止遍历的方式以满足您的确切需求。在您拥有所需的 DirectoryInfo 对象后,您就可以做您需要的事情了。我假设您将需要完整路径或使用 Directory 对象。要获取完整路径,请使用 FullName 属性。例如,如果您想要目录中的所有文件,您可以执行以下操作:

       string[] fileNames = Directory.GetFiles(di.FullName);
      

      【讨论】:

      • 这对于需要 X 数量规范的路径是否可行,我的意思是可以将所有父文件夹名称获取到除 C:\ProgramFiles 之外的所有内容。就像 file1.txt 需要转到 Folder1,而 file2.txt 只需要转到 Folder2,但随着新路径的添加,您不一定知道它需要走多远。 (我正在制作的程序是一个自动补丁 .zip 制作器,它将旧文件列表与新文件列表进行比较,并将新文件压缩为一个补丁。)如果你明白我想说什么。
      • 在那种情况下,您知道要考虑您的根文件夹吗?如果是这样,那么只需使用 while 循环而不是 for 并终止,直到您到达您认为根路径的路径。所以它就像:while(di.FullName != @"C:\ProgramFiles"){ di = di.Parent;}。这会让你得到你想要的还是我误解了什么?或者你不知道你的根目录?如果是这样,那显然是行不通的。
      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2012-12-26
      • 2021-10-22
      • 2011-12-16
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多