【问题标题】:How to receive all files within a folder?如何接收文件夹中的所有文件?
【发布时间】:2013-04-05 21:06:06
【问题描述】:

我想了解如何接收文件夹中的所有文件名并将其存储到列表中。

我一直在寻找帖子,这就是我目前所拥有的:

private void btnSort_Click(object sender, EventArgs e)
{
        //if (Directory.Exists(Path)) 
        foreach (string file in Directory.EnumerateFiles(FilePath))
        {
            NoOfFiles++;
            FileNames.Add(file);
            //Should implement adding something that converts lower case letters to upper.
            Directory.CreateDirectory(FilePath + "\\" + file[0]);
        }
}

它在一定程度上有效,但我想创建一个以文件的第一个字母命名的目录(例如RndFile.txt),而不是文件路径(例如C:\\something\\something\\RndFile.txt)。

因此,我想将该信息存储在一个列表中。

但是,我不知道如何只接收此信息或删除不必要的部分。

谢谢! 希瓦姆

附:对于有兴趣的人,这是一个 A-Level 计算项目。我正在创建一个简单的、编码错误的程序来根据文件的第一个字母对文件进行排序。我很难问我的老师这是否是个好主意。

【问题讨论】:

    标签: c# file sorting filtering


    【解决方案1】:

    你的工作很对,你只需要将class Path提供的功能添加到你的循环中

    private void btnSort_Click(object sender, EventArgs e)
    {
        foreach (string file in Directory.EnumerateFiles(FilePath))
        {
            string fileName = Path.GetFileName(file);
            string newDir = Path.Combine(FilePath, fileName[0]);
            if(!Directory.Exists(newDir))
                 Directory.CreateDirectory(newDir);
    
            // If you still need to store the filenames in a list you could add
            FileNames.Add(fileName);
            // but no need to keep a counter variable, you could Always get that value
            // using FileNames.Count after the loop ends...
    
        }
    }
    

    【讨论】:

      【解决方案2】:
      private static string[] GetFileNames(string path, string filter)
          {
              string[] files = Directory.GetFiles(path, filter);
              for (int i = 0; i < files.Length; i++)
              {
                  files[i] = Path.GetFileName(files[i]);
      
              }
              return files;
          }
      

      在页面加载时调用该函数

      string[] myFiles = GetFileNames("D:\\folderName", "*.txt");
      

      myFiles 数组现在包含文件夹内所有文件的名称。
      要对文件名进行排序,只需对数组文件进行排序

      Array.Sort(myFiles);
      

      【讨论】:

        【解决方案3】:

        System.IO 中的 FileInfo 对象通过 Name 属性给出文件名:

             private void btnSort_Click(object sender, EventArgs e)
            {
                    DirectoryInfo di = new DirectoryInfo("path");
                    FileInfo[] fi = di.GetFiles();
                    foreach (FileInfo item in fi)
                    {
                        string filename = item.Name;
                        string fullname = item.FullName;
                    }
             }
        

        【讨论】:

          【解决方案4】:

          不确定我是否正确理解了您的问题。

          Path 命名空间包含一些有用的功能。我想你想要

          Path.GetFileNameWithoutExtension() - 这只是给你文件名。然后你可以把它当作一个字符串来处理

          Substring(0,1) 获取第一个字母。

          【讨论】:

            【解决方案5】:

            使用DirectoryInfo 代替Directory

            DirectoryInfo dir = new DirectoryInfo("c:");
            FileInfo[] files = dir.GetFiles();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-04-05
              • 1970-01-01
              • 1970-01-01
              • 2019-09-04
              • 1970-01-01
              • 2013-11-26
              • 2011-11-27
              • 2012-05-25
              相关资源
              最近更新 更多