【问题标题】:How do I store only the folder names as an array and not the while path (C#)如何仅将文件夹名称存储为数组而不是 while 路径(C#)
【发布时间】:2017-02-15 17:08:00
【问题描述】:

所以我知道如何存储完整路径,而不仅仅是结束文件夹名称,例如,我已经有了一个数组,但有什么方法可以从所有数组中删除某些字符或只从路径中获取文件夹名称?

编辑:string[] allFolders = Directory.GetDirectories(directory); 这就是我用来获取所有文件夹名称的方法,但这让我获得了整个路径 编辑:它们需要存储在一个数组中

编辑:抱歉,我需要一个包含 "mpbeach","blabla","keyboard" 等值的数组,而不是 E:\Zmod\idk\DLC List Generator\DLC List Generator by Frazzlee\ ,所以基本上不是完整路径

【问题讨论】:

  • “结束文件夹名称”是什么意思? Path 有 GetFileName,如果你用反斜杠分割整个 URL,Length 中的倒数第二项将是“最后一个文件夹”
  • 我发现您的问题非常令人困惑。您能否提供一些带有模拟值的预期输出?我已经多次阅读您的帖子,但我仍然不确定您要求的是重复内容还是每个人都和我一样困惑。
  • 仍然认为我的答案是得到你需要的东西的方法——尽管它被否决了。我认为人们不理解您的要求。

标签: c#


【解决方案1】:

这行得通。

string[] allFolders = Directory.EnumerateDirectories(directory)
            .Select(d => new DirectoryInfo(d).Name).ToArray();

这也有效。不同之处在于我们使用的是List<string> 而不是string[]

List<string> allFolders = Directory.EnumerateDirectories(directory)
                          .Select(d => new DirectoryInfo(d).Name).ToList();

示例1:使用string[] allFolders

测试文件夹

在 VS IDE 中,处于调试模式

示例 2:使用List&lt;string&gt; allFolders

测试文件夹

在 VS IDE 中,处于调试模式

示例 2:使用string[] allFolders

【讨论】:

    【解决方案2】:

    不需要字符串操作...只需使用DirectoryInfo

    var allFolders = new DirectoryInfo(directory).GetDirectories()
                    .Select(x => x.Name)
                    .ToArray();
    

    【讨论】:

    • 这给出了给定目录中的文件夹列表,不是吗? OP 正在询问如何从文件 URL 中提取最后一个文件夹名称。
    • That gives a list of folders in a given directory,no?
    • 我不明白 x => 部分抱歉
    • 我知道它将项目更改为数组,但我是否保持不变?
    • 好的,我有 2.0 的目标框架,将其更改为 4.0,现在可以正常工作了,非常感谢
    【解决方案3】:

    注意我将您的问题理解为如何从文件 URL 中提取最后一个文件夹名称。其他人则将其视为如何提取目录中文件夹的名称。如果我错了,那是因为我误解了你的问题。

    用反斜杠分割得到文件夹。倒数第二个值是最后一个文件夹:

    string folder = @"c:\mydrive\testfolder\hello.txt";
    string[] parts = folder.Split('\\');
    string lastFolder = parts[parts.Length - 1];
    //Yields "testfolder";
    

    将其向前推进到您想要的:

     private string[] foldersOnly(){
      List<string> folders = new List<string>();
      string[] allFolders = Directory.GetDirectories(directory);
      foreach(string folder in allfolders){
           string[] parts = folder.Split('\\');
           folders.Add(parts[parts.Length-1]);
      }
      }
      return folders.ToArray();
    

    【讨论】:

    • 这个方案容易出错。如果传入的文件夹是 C:\mydrive\testfolder\ 会发生什么
    • 然后你会得到“testfolder”,它是 URL 中的最后一个文件夹。
    • @ShannonHolsinger 实际上你会得到空字符串,因为string.Split 会将空条目留在那里。
    • 谢谢,我回家试试这个
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多