[英]Get file extensions to populate into a ComboBox in C#
所以我有一个包含许多扩展名的图像文件夹,如.ico
, .png
, .jpg
等,我使用以下代码将其填充到一个comboBox
:
string caminho = @"C:\Users\User1\Desktop\Test\";
DirectoryInfo dir = new DirectoryInfo(caminho);
FileInfo[] fi = dir.GetFiles();
foreach (var ficheiro in fi)
{
string caminhoF = caminho + ficheiro.ToString();
string extension = Path.GetExtension(caminhoF);
comboBox1.Items.Add(extension);
}
代码获取此路径中的所有现有扩展并将其放在comboBox
,但它显示如下:
.ico
.ico
.ico
.png
.png
.jpg
.jpg
我想简单地显示每个现有的扩展名,例如对它们进行分组。
你能帮帮我吗?
您可以从FileInfo
获取文件扩展名。 您还可以使用Linq Distinct()
来获取唯一的扩展名。
string caminho = @"C:\Users\User1\Desktop\Test\";
DirectoryInfo dir = new DirectoryInfo(caminho);
var extensions = dir.GetFiles().Select(fi => fi.Extension).Distinct();
foreach (var extension in extensions) {
comboBox1.Items.Add(extension);
}
好的,我找到了解决方案。 这是代码:
string caminho = @"C:\Users\User1\Desktop\Test\";
DirectoryInfo dir = new DirectoryInfo(caminho);
FileInfo[] fi = dir.GetFiles();
foreach (var ficheiro in fi)
{
string caminhoF = caminho + ficheiro.ToString();
string extension = Path.GetExtension(caminhoF);
if (!comboBox1.Items.Contains(extension))
{
comboBox1.Items.Add(extension);
}
}
以下是粗略的步骤:
您需要的部分是找到一个可以帮助您存储唯一值的数据结构。
HashSet<T>
让你回到这里:它允许快速查找以确定集合成员资格(“集合是否已包含某些元素x?”)。
string caminho = @"C:\Users\User1\Desktop\Test\";
DirectoryInfo dir = new DirectoryInfo(caminho);
FileInfo[] fi = dir.GetFiles();
HashSet<string> extensions = new HashSet<string>;
foreach (var ficheiro in fi)
{
string caminhoF = caminho + ficheiro.ToString();
string extension = Path.GetExtension(caminhoF);
// If the set does not contain this extension, it'll be added and
// `Add()` will return true. Otherwise, it will do nothing and `Add()`
// will return false.
extensions.Add( extension );
}
foreach( var extension in extensions ) {
comboBox1.Items.Add(extension);
}
LINQ-to-Objects使这很容易。 LINQ类似于SQL但允许链接转换。
var comboBox1 = new ComboBox();
var caminho = @"C:\Users\User1\Desktop\Test\";
var dir = new DirectoryInfo(caminho);
var extensions = dir.GetFiles()
.Select(fi => fi.Extension)
.OrderBy(ext => ext, StringComparer.CurrentCulture)
.Distinct(StringComparer.CurrentCultureIgnoreCase)
.ToArray();
comboBox1.Items.AddRange(extensions);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.