[英]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.