如何接收文件夹中的所有文件?

时间:2013-04-13 09:59:48

标签: c# file sorting filtering

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

我一直在搜索帖子,这是我到目前为止所做的:

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)。

因此,我想将这些信息存储在列表中。

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

谢谢! Shivam

P.S。对于感兴趣的人,这是一个A-Level计算项目。我正在创建一个简单,编码错误的程序,根据他们的第一个字母对文件进行排序。我很难问我的老师这是不是一个好主意。

5 个答案:

答案 0 :(得分:0)

使用DirectoryInfo代替Directory

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

答案 1 :(得分:0)

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

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

Path.GetFileNameWithoutExtension() - 这只是文件名。然后你可以将它视为一个字符串和

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

答案 2 :(得分:0)

System.IO中的FileInfo对象按名称属性提供文件名:

     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;
            }
     }

答案 3 :(得分:0)

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);

答案 4 :(得分:0)

您的工作非常正确,您只需要将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...

    }
}