【问题标题】:How to add files into List based on filename如何根据文件名将文件添加到列表中
【发布时间】:2021-01-11 13:31:04
【问题描述】:

我在一个目录中有文件。我想根据循环中的文件名将每个文件添加到列表中。首先需要根据代码排序,然后是值。

filename sample

   name|code|value|dept
   --------------------
   a_001_200_x.txt 
   ab_001_100_x.txt
   abc_003_100_x.txt
   abcd_002_100_x.txt

输出应该是

   a_001_100_x.txt
   ab_001_200_x.txt
   abc_002_100_x.txt
   abcd_003_100_x.txt
public void GetFiles()
{
     List<string> files =  Directory.GetFiles("C:/temp", "*.txt").ToList();
     foreach (var file in files)
    {
       Console.WriteLine(Path.GetFileName(file));
    }
}

【问题讨论】:

  • 您的问题是如何将文件名a_001_200_x.txt 转换为abc_001_200_x.txt(其他输入文件名类似)?
  • 正如@Sinatr 所指出的-您的问题尚不清楚。您是在重命名文件还是根据其现有名称进行排序?
  • 不清楚,GetFiles() 只是一个Directory.GetFiles(String, String),这里不需要循环。对于第二种方法,排序注释器是 foreach 循环。一切看起来都很混乱。 AppendData,但附加到什么/在哪里?
  • @Sinatr ,我想根据排序将文件添加到列表中。

标签: c# .net file for-loop asp.net-core


【解决方案1】:

这是为您准备的示例代码。步骤将是读取文件路径,然后从文件路径中获取文件名。然后将它们添加到列表中。按文件名排序列表。然后使用已经订购的文件路径读取实际文件。希望这很清楚。如果您有任何问题,请告诉我。

    //string[] filePaths = Directory.GetFiles("Directory Path");
    string[] filePaths = new string[] { "a_001_200_x.txt", "ab_001_100_x.txt" };
    List<FileInput> fileInput = new List<FileInput>();
    foreach (string path in filePaths)
    {
        fileInput.Add(new FileInput
        {
           //here you can do Path.GetFileName(path).Substring(path.Length - 13, 13)
            FileName = path.Substring(path.Length - 13, 13),
            FilePath = path,
        });
    }

    fileInput = fileInput.OrderBy(x => x.FileName).ToList();

    foreach(var f in fileInput){
         //Read your file here from the disk with sorted order.
    }



public class FileInput
{
    public string FileName { get; set; }
    public string FilePath { get; set; }
}

【讨论】:

  • 好的。我在想它将是固定输入 001_200 所以考虑到它将是 13 个字符。
【解决方案2】:
 List<string> files = Directory.GetFiles(@"C:/Tempfolder", "*.txt").ToList();

  var sortfiles = from file in files orderby Path.GetFileNameWithoutExtension(file).ToString().Split('_').Skip(1).FirstOrDefault(),
         Path.GetFileNameWithoutExtension(file).ToString().Split('_').Skip(2).FirstOrDefault()
                 select file;


(Sample data )
   
   x_2_100_y.txt
   x_1_200_y.txt
   x_1_100_y.txt
   x_2_300_y.txt
   x_1_400_y.txt
   x_3_50_y.txt
   x_3_40_y.txt

(Sorting output (Ascending order))

  x_1_100_y.txt
  x_1_200_y.txt
  x_1_400_y.txt
  x_2_100_y.txt
  x_2_300_y.txt
  x_3_40_y.txt
  x_3_50_y.txt

【讨论】:

  • 那么“a[bcd]”部分应该被忽略吗?在您的问题中,从“a”到“abcd”的所有内容都变成了“abc”......
  • @CodeCaster,是的,正确。我刚刚编辑了我的问题。我只需要根据代码和值对文件进行排序。
  • 仍然不匹配。仔细查看您的输入和输出。
  • 仍然不清楚 abcd 部分是否需要忽略或考虑进行排序?如果您需要忽略 abcd 部分,那么您可以尝试我的解决方案。如果2-3行我只是想给你一个详细的答案以供理解,可以写。
  • 如果我们有像 aa_001_200_x.txt ab_001_100_x.txt 这样的文件名怎么办。这将如何排序?
猜你喜欢
  • 2020-01-14
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多