【问题标题】:Extract multiple filenames from multiple paths into multiple strings从多个路径中提取多个文件名到多个字符串中
【发布时间】:2011-12-07 23:22:50
【问题描述】:

我有一个字符串:

C:\Users\O&S-IT\Desktop\NetSparkle (4).txt | C:\Users\O&S-IT\Desktop\NetSparkle (5).txt | C:\Users\O&S-IT\Desktop\NetSparkle (6).txt | C:\Users\O&S-IT\Desktop\NetSparkle (1).txt | C:\Users\O&S-IT\Desktop\NetSparkle (2).txt | C:\Users\O&S-IT\Desktop\NetSparkle (3).txt

我希望能够从字符串中提取 6 个文件名,而无需将它们各自的路径转换为 ​​6 个新字符串,例如:

“NetSparkle (4).txt”
"NetSparkle (5).txt"
"NetSparkle (6).txt"
"NetSparkle (1).txt"
"NetSparkle (2).txt"
"NetSparkle (3).txt"

分隔符始终为“|”。文件名和路径总是不同的。字符串中路径和文件名的实际数量也可能不同。有时字符串中可能有 3 个路径/文件名,有时可能多达 15 个以上。

我将如何在 C# 3.5+ 中执行此操作?

【问题讨论】:

    标签: c# string file path


    【解决方案1】:
    var fileNames = myString.Split('|').Select(s => Path.GetFileName(s));
    

    【讨论】:

    • 这个杀死了最后的空白: var filenames = stringToExtract.Split(new[] { " | " }, StringSplitOptions.RemoveEmptyEntries).Select(item => Path.GetFileName(item)) ;
    • 如果我尝试这样做: Console.WriteLine("'" + fileNames[0] + "'");使用您的方法,我收到此错误:无法使用 [] 将索引应用于“System.Collections.Generic.IEnumerable 类型的表达式。如何在您的方法中使用 fileNames 输出。你的方法也有第一个答案的尾随空格问题吗?
    • 您可以添加 .ToList() 以使 LINQ 立即计算表达式。
    【解决方案2】:
    var fileNames = input.Split('|')
                         .Select( x => Path.GetFileName(x))
                         .ToList();
    

    或更短:

    var fileNames = input.Split('|')
                         .Select(Path.GetFileName)
                         .ToList();
    

    【讨论】:

    • 我用你的方法得到一个尾随空格,除了最后一个文件名。示例:'NetSparkle(4).txt' txt 中的“t”和“'”后面有一个空格。
    • @fraXis:那必须在您的数据中 - 您可以使用Trim() 修复它,即.Select( x => Path.GetFileName(x).Trim())
    【解决方案3】:

    String.Split 可以解决问题。

    【讨论】:

    • 不完全...仍然需要路径的文件名部分。
    【解决方案4】:

    这是一个快速的两步过程。

    第 1 步: 使用 string.Split(char) 获取字符串数组。在您的情况下,类似于string[] files = filelist.Split('|');

    第 2 步: 对于数组中的每个字符串,将所有内容切掉,直到最后一个斜杠。示例files[i] = files[i].Substring(files[i].LastIndexOf('/') + 1);

    我相信你需要+1 来排除最后一个斜线。但是,如果它会缩短您的文件名,请将其删除。

    【讨论】:

      【解决方案5】:

      这是我给你的建议:

              var stringToExtract = @"C:\Users\O&S-IT\Desktop\NetSparkle (4).txt | C:\Users\O&S-IT\Desktop\NetSparkle (5).txt | C:\Users\O&S-IT\Desktop\NetSparkle (6).txt | C:\Users\O&S-IT\Desktop\NetSparkle (1).txt | C:\Users\O&S-IT\Desktop\NetSparkle (2).txt | C:\Users\O&S-IT\Desktop\NetSparkle (3).txt";
      
              var fullpaths = stringToExtract.Split(new string[] { " | " }, StringSplitOptions.RemoveEmptyEntries);
      
              foreach (var fullpath in fullpaths)
              {
                  var filename = Path.GetFileName(fullpath);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        相关资源
        最近更新 更多