我正在使用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
提前感谢任何帮助或建议的阅读材料。
答案 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
}