0

我正在使用 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

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

4

2 回答 2

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);
            }
于 2013-05-16T16:30:17.647 回答
1

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

除了 ListView,您还可以使用 CheckedListBox,它已经具有您需要的复选框。您可以获取文件(具有所需的扩展名)并像这样填充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
    }
于 2013-05-16T17:18:10.667 回答