在C#Listview中显示特定文件类型的文件夹内容

时间:2013-05-16 16:20:02

标签: c# winforms

我正在使用Visual C#2010 Express。我要做的是列出特定文件类型的预定义目录中的所有文件。每个列表旁边都有一个复选框。因此,可以单独在所有标记的文件上运行相同的命令。

我曾使用cmd.exe批处理脚本来做类似的事情。但我不知道如何将其翻译成C#。用于System.Windows.Forms.ListView。至少我想我想使用ListView。我也不知道如何在每个文件名列表的开头附加一个复选框。

批处理示例:

@echo off
REM Path variable set for sake of example.
set "path=c:\temp" 

:fList REM File List Loop
SETLOCAL EnableDelayedExpansion
For /F "delims=" %%A In ( ' DIR /B /O:N /A:-D "%path%\*.ext" ' ) Do (
echo %%A
)
goto :EOF

提前感谢任何帮助或建议的阅读材料。

2 个答案:

答案 0 :(得分:1)

为了在目录中获取您想要执行以下操作的文件夹:

string myDir = @"c:\";
string wildcard = "*.ext";
var files = System.IO.Directory.GetFiles(myDir,wildcard);

为了将这些文件添加到列表视图中,这是一个不错的起点链接:

这是上述链接的代码段:

   void CreateMyListView()
        {

                          // Create a new ListView  control.
                ListView listView1 = new ListView();
                listView1.Bounds = new Rectangle(new Point(10,10), new Size(300,200));

                          // Set the view to show details.
                listView1.View = View.Details;
                // Allow the user to edit item text.
                listView1.LabelEdit = true;
                // Allow the user to rearrange columns.
                listView1.AllowColumnReorder = true;
                // Display check boxes.
                listView1.CheckBoxes = true;
                // Select the item and subitems when selection is made.
                listView1.FullRowSelect = true;
                // Display grid lines.
                listView1.GridLines = true;
                // Sort the items in the list in ascending order.
                listView1.Sorting = SortOrder.Ascending;

                // Create three items and three sets of subitems for each item.
                ListViewItem item1 = new ListViewItem("item1",0);
                // Place a check mark next to the item.
                item1.Checked = true;
                item1.SubItems.Add("1");
                item1.SubItems.Add("2");
                item1.SubItems.Add("3");
                ListViewItem item2 = new ListViewItem("item2",1);
                item2.SubItems.Add("4");
                item2.SubItems.Add("5");
                item2.SubItems.Add("6");
                ListViewItem item3 = new ListViewItem("item3",0);
                // Place a check mark next to the item.
                item3.Checked = true;
                item3.SubItems.Add("7");
                item3.SubItems.Add("8");
                item3.SubItems.Add("9");

                // Create columns for the items and subitems.
                listView1.Columns.Add("Item Column", -2, HorizontalAlignment.Left);
                listView1.Columns.Add("Column 2", -2, HorizontalAlignment.Left);
                listView1.Columns.Add("Column 3", -2, HorizontalAlignment.Left);
                listView1.Columns.Add("Column 4", -2, HorizontalAlignment.Center);

                //Add the items to the ListView.
                        listView1.Items.AddRange(new ListViewItem[]{item1,item2,item3});

                // Create two ImageList objects.
                ImageList imageListSmall = new ImageList();
                ImageList imageListLarge = new ImageList();

                // Initialize the ImageList objects with bitmaps.
                imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage1.bmp"));
                imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage2.bmp"));
                imageListLarge.Images.Add(Bitmap.FromFile("C:\\MyLargeImage1.bmp"));
                imageListLarge.Images.Add(Bitmap.FromFile("C:\\MyLargeImage2.bmp"));

                //Assign the ImageList objects to the ListView.
                listView1.LargeImageList = imageListLarge;
                listView1.SmallImageList = imageListSmall;

                // Add the ListView to the control collection. 
                this.Controls.Add(listView1);
            }

答案 1 :(得分:1)

要获取文件,如果您只有一个扩展名,则可以使用Directory.GetFiles(path, extension)。在我的例子中,我提出了一种方法来处理多个扩展。

您也可以使用CheckedListBox代替ListView,它已经拥有您需要的复选框。 您可以获取文件(具有所需的扩展名)并填写checkedListBox,如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        const string path = @"c:/yourpath";
        List<string> extensions = new List<string> { "EXE", "PNG" };

        string[] files = GetFilesWithExtensions(path, extensions);
        checkedListBox1.Items.AddRange(files);
    }

    private string[] GetFilesWithExtensions(string path, List<string> extensions)
    {
        string[] allFilesInFolder = Directory.GetFiles(path);
        return allFilesInFolder.Where(f => extensions.Contains(f.ToUpper().Split('.').Last())).ToArray();
    }

当然,如果您只需要.ext作为扩展名,那么它将会是这样的:

    private void Form1_Load(object sender, EventArgs e)
    {
        const string path = @"c:/yourpath";
        const string extension = "*.ext";

        checkedListBox1.Items.AddRange(Directory.GetFiles(path, extension));
    }

一旦用户检查了他需要的文件,例如点击一个按钮,您就可以获得所选的元素:

    private void button1_Click(object sender, EventArgs e)
    {
        CheckedListBox.CheckedItemCollection selectedFiles = checkedListBox1.CheckedItems;
        //Do stuff with files
    }