【问题标题】:drag and drop files from folder c# wpf从文件夹 c# wpf 拖放文件
【发布时间】:2018-04-05 09:09:55
【问题描述】:

我试图在我的 WPF 应用程序中使用 ListView,它接受拖放 - 文件和目录,但如果是目录,它应该从它们获取文件,而不是它们本身。 我的 XAML:

<ListView ... AllowDrop="True" Drop="importListView_Drop">
...
</ListView>

我的代码:

private void importListView_Drop(object sender, DragEventArgs e)
{
    var files = (string[])e.Data.GetData(DataFormats.FileDrop);
    core.AddIntoImport(files);
}

这现在会产生输出,包括目录并省略其中的文件,f.e.

C:/Example/Files/MyFile.mp3
C:/Example/Files/SubDirectory/
...

虽然我希望它实际上从 SubDirectory 获取所有文件,而不是包含 SubDirectory 本身。我可以自己做到这一点:“是目录吗?-是的:排除它并从中获取所有文件”但问题是,f.e. 中是否包含一些更好的方法。事件参数已经?

为了让我自己更清楚,下面的代码在 WinForms 应用程序中完美地完成了这项工作。 WPF中有替代方案吗?

private void Form1_DragDrop(object sender, DragEventArgs e)
{
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
    InsertImport(files);
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.Copy;
}

【问题讨论】:

    标签: c# wpf drag-and-drop


    【解决方案1】:

    你可以用这个

    var allFiles = files.Where(Directory.Exists)
                        .SelectMany(dir => Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories))
                        .ToList();
    

    请注意,如果您对子目录没有适当的权限,则会抛出此错误。在这种情况下,您将不得不更多地手动执行此操作,并检查/忽略错误

    【讨论】:

    • 这会从提供的目录/目录中获取所有文件,但不会从导入数组/列表中删除目录本身,也不会考虑包含文件和目录的输入。尽管如此,这似乎是获取文件的好解决方案,但我更好奇框架是否可以在没有我自己编码的情况下做到这一点。对我来说似乎很奇怪 WPF 是那个“愚蠢的”,实际上只是收集路径而不做其他任何事情。
    • 澄清一下 - WinForms 可以通过使用 DragEnter 和 DragDrop 事件来做到这一点,这两个事件的代码都很短。 WPF不能吗?诡异的。这就是我问的原因。
    • @JanToms 是的,我可能误解了这个问题
    【解决方案2】:

    顺便说一句,最终以这种方式设法做到了...:

    var files = (string[])e.Data.GetData(DataFormats.FileDrop);
    var importList = new List<string>();
    foreach (string s in files)
    {
        if (Directory.Exists(s))
            foreach (var f in Directory.GetFiles(s, "*.*", SearchOption.AllDirectories))
                importList.Add(f);
        else if (File.Exists(s))
            importList.Add(s);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2020-02-10
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多