如何在列表视图中的文件浏览器中区分FileInfo和DirectoryInfo

时间:2019-03-16 16:22:05

标签: c# listview windows-forms-designer fileinfo directoryinfo

我想使用Windows Forms做一个文件浏览器,但是我已经做了一些事情,但是当我想使用ListView的DoubleClick事件时,我不知道如何编码该文件浏览器需要采取不同的动作,我双击文件或文件夹。

我的目标是:

  1. 单击文件-将其文本加载到文本框
  2. 单击目录-将其打开并将其加载到列表视图中。

我也知道如何做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 { }
    }
}

2 个答案:

答案 0 :(得分:0)

DirectoryInfoFileInfo对象添加到Tag的{​​{1}}属性中。即

ListViewItem

或提供文件信息:

...
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;

答案 1 :(得分:0)

尝试以下代码:

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");