我想了解如何接收文件夹中的所有文件名并将其存储到列表中。
我一直在搜索帖子,这是我到目前为止所做的:
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计算项目。我正在创建一个简单,编码错误的程序,根据他们的第一个字母对文件进行排序。我很难问我的老师这是不是一个好主意。
答案 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...
}
}