簡體   English   中英

獲取文件擴展名以填充到C#中的ComboBox

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM