如何在列表视图中的文件资源管理器中区分FileInfo和DirectoryInfo

问题描述 投票:-1回答:2

我想用Windows Forms创建一个文件浏览器,我已经做了一些事情,但是当我想使用我的ListView的DoubleClick事件时,我不知道如何编写该文件资源管理器需要采取不同的行为双击文件或文件夹。

我的目标是:

  1. 单击文件 - 将其文本加载到TextBox中
  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 { }
    }
}
c# listview windows-forms-designer fileinfo directoryinfo
2个回答
0
投票

DirectoryInfoFileInfo对象添加到TagListViewItem属性中。即

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

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");
© www.soinside.com 2019 - 2024. All rights reserved.