如何在列表视图的文件资源管理器中区分 FileInfo 和 DirectoryInfo
How to make difference between FileInfo and DirectoryInfo in a file explorer in list view
我想用 Windows 表单制作一个文件浏览器,我已经做了一些事情,但是当我想使用我的 ListView 的 DoubleClick 事件时,我不知道如何编写该文件当我双击文件或文件夹时,资源管理器需要采取不同的操作。
我的目标是:
- 单击文件 - 将其文本加载到文本框中
- 单击目录 - 打开它并将其加载到列表视图中。
我也知道如何执行 1. 和 2.,我只是不知道如何让我的 DoubleClick 函数知道 ListView 中的所选项目是 1. 还是 2.
我这样构建我的 ListView:
private void miOpen_Click(object sender, EventArgs e)
{
InputDialog dlg = new InputDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
DirectoryInfo parentDI = new DirectoryInfo(dlg.Path);
listView1.Items.Clear();
try
{
foreach (DirectoryInfo df in parentDI.GetDirectories())
{
ListViewItem lvi = new ListViewItem(new string[] {
df.Name, df.Parent.ToString(),
df.CreationTime.ToShortDateString(), df.FullName });
listView1.Items.Add(lvi);
}
foreach (FileInfo fi in parentDI.GetFiles())
{
ListViewItem lvi = new ListViewItem(new string[] {
fi.Name, fi.Length.ToString(),
fi.CreationTime.ToShortDateString(), fi.FullName } );
listView1.Items.Add(lvi);
}
}
catch { }
}
}
将 DirectoryInfo
或 FileInfo
对象添加到 ListViewItem
的 Tag
属性。即
...
var lvi = new ListViewItem(new string[] {
df.Name,
df.Parent.ToString(),
df.CreationTime.ToShortDateString(),
df.FullName
});
lvi.Tag = df;
listView1.Items.Add(lvi);
...
或文件信息:
lvi.Tag = fi;
然后,在列表视图中选择一个项目后:
private void btnTest_Click(object sender, EventArgs e)
{
// Show the first item selected as an example.
if (listView1.SelectedItems.Count > 0) {
switch (listView1.SelectedItems[0].Tag) {
case DirectoryInfo di:
MessageBox.Show($"Directory = {di.Name}");
break;
case FileInfo fi:
MessageBox.Show($"File = {fi.Name}");
break;
default:
break;
}
}
}
试试这个代码:
FileAttributes fileAttributes = File.GetAttributes("C:\file.txt");
if (fileAttributes.HasFlag(FileAttributes.Directory))
Console.WriteLine("This path is for directory");
else
Console.WriteLine("This path is for file");
我想用 Windows 表单制作一个文件浏览器,我已经做了一些事情,但是当我想使用我的 ListView 的 DoubleClick 事件时,我不知道如何编写该文件当我双击文件或文件夹时,资源管理器需要采取不同的操作。
我的目标是:
- 单击文件 - 将其文本加载到文本框中
- 单击目录 - 打开它并将其加载到列表视图中。
我也知道如何执行 1. 和 2.,我只是不知道如何让我的 DoubleClick 函数知道 ListView 中的所选项目是 1. 还是 2.
我这样构建我的 ListView:
private void miOpen_Click(object sender, EventArgs e)
{
InputDialog dlg = new InputDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
DirectoryInfo parentDI = new DirectoryInfo(dlg.Path);
listView1.Items.Clear();
try
{
foreach (DirectoryInfo df in parentDI.GetDirectories())
{
ListViewItem lvi = new ListViewItem(new string[] {
df.Name, df.Parent.ToString(),
df.CreationTime.ToShortDateString(), df.FullName });
listView1.Items.Add(lvi);
}
foreach (FileInfo fi in parentDI.GetFiles())
{
ListViewItem lvi = new ListViewItem(new string[] {
fi.Name, fi.Length.ToString(),
fi.CreationTime.ToShortDateString(), fi.FullName } );
listView1.Items.Add(lvi);
}
}
catch { }
}
}
将 DirectoryInfo
或 FileInfo
对象添加到 ListViewItem
的 Tag
属性。即
...
var lvi = new ListViewItem(new string[] {
df.Name,
df.Parent.ToString(),
df.CreationTime.ToShortDateString(),
df.FullName
});
lvi.Tag = df;
listView1.Items.Add(lvi);
...
或文件信息:
lvi.Tag = fi;
然后,在列表视图中选择一个项目后:
private void btnTest_Click(object sender, EventArgs e)
{
// Show the first item selected as an example.
if (listView1.SelectedItems.Count > 0) {
switch (listView1.SelectedItems[0].Tag) {
case DirectoryInfo di:
MessageBox.Show($"Directory = {di.Name}");
break;
case FileInfo fi:
MessageBox.Show($"File = {fi.Name}");
break;
default:
break;
}
}
}
试试这个代码:
FileAttributes fileAttributes = File.GetAttributes("C:\file.txt");
if (fileAttributes.HasFlag(FileAttributes.Directory))
Console.WriteLine("This path is for directory");
else
Console.WriteLine("This path is for file");