0

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

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

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

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

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

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

谢谢!希瓦姆

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

4

5 回答 5

0

使用DirectoryInfo代替Directory

DirectoryInfo dir = new DirectoryInfo("c:");
FileInfo[] files = dir.GetFiles();
于 2013-04-13T10:03:42.217 回答
0

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

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

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

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

于 2013-04-13T10:04:21.497 回答
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);
于 2013-04-13T10:11:03.507 回答
0

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

    }
}
于 2013-04-13T10:11:31.383 回答
0

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;
            }
     }
于 2013-04-13T10:05:28.897 回答