我对C#很新.我的老板让我用listview作为文件浏览器编写了一些代码.我试了一下它似乎有效.此代码用于打开驱动器中的文件并将其显示在listView上.这很简单.我还做了一个额外的功能,可以清除listView中显示的项目.我想添加其他功能,我也可以打开目录,而不仅仅是文件.顺便说一句,这是我的代码示例:
private void btnOpen_Click(object sender, EventArgs e)
{
string strSelectedPath;
folderBrowserDialog1.ShowDialog();
strSelectedPath = folderBrowserDialog1.SelectedPath;
label1.Text = strSelectedPath;
DirectoryInfo di = new DirectoryInfo(strSelectedPath);
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
listView1.Items.Add(file.Name);
}
}
private void btnClear_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
label1.Text="";
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我怎么样吗?
如果我正确理解您的问题(您不仅要列出所选目录中的文件,还要列出子目录),您将需要查看DirectoryInfo类的GetDirectories方法.
你可以这样做,也许:
DirectoryInfo di = new DirectoryInfo(strSelectedPath);
// first list sub-directories
DirectoryInfo[] dirs = di.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
listView1.Items.Add(dir.Name);
}
// then list the files
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
listView1.Items.Add(file.Name);
}
Run Code Online (Sandbox Code Playgroud)
更新:我建议您将上面的代码移动到一个单独的方法中,该方法为路径采用字符串参数(类似ListDirectoryContents(string path)).在此方法中,您可以从列表视图中清除项目,设置标签文本,然后添加上述新内容.
可以从您的btnOpen_Click方法调用此方法,传入folderBrowserDialog1.SelectedPathpath参数.
我通常会尽量保持我的事件处理程序尽可能小,最好不要执行任何实际工作,而只需调用其他方法来完成工作.这为从其他地方触发相同的功能开辟了更多.
例如,假设您的应用程序可以将路径作为命令行参数,那么只需ListDirectoryContents使用命令行中的路径调用,而不是在表单中复制相同的行为,这将是更干净的代码.
该方法的完整代码示例:
private void btnOpen_Click(object sender, EventArgs e)
{
string path = BrowseForFolder();
if (path != string.Empty)
{
ListDirectoryContent(path);
}
}
private string BrowseForFolder()
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
return fbd.SelectedPath;
}
return string.Empty;
}
private void ListDirectoryContent(string path)
{
label1.Text = path;
listView1.Items.Clear();
DirectoryInfo di = new DirectoryInfo(path);
// first list sub-directories
DirectoryInfo[] dirs = di.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
listView1.Items.Add(dir.Name);
}
// then list the files
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
listView1.Items.Add(file.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码的优点是,无论何时需要浏览文件夹,都可以重复使用BrowseForFolder方法,因为它只返回选定的路径,并且没有连接到路径的用途.同样,ListDirectoryContent方法完全没有意识到path参数的来源; 它可能来自文件夹浏览器,它可能来自命令行或其他任何地方.
如果您专注于让您的方法只执行其"核心任务",那么依靠输入参数获取他们需要的任何其他信息,您将获得更易于重用和维护的代码.
当谈到事件处理程序(例如btnOpen_Click)时,我喜欢将它们视为触发器; 它们会触发事情发生,但实际上并没有真正做很多事情.