c# - 从文件夹中拖放文件 c# wpf

标签 c# wpf drag-and-drop

我试图在我的 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 本身。我可以自己做这个:“是目录吗? - 是的:排除它并从中获取所有文件”但问题是,fe中是否包含一些更好的方法?事件参数已经存在了吗?

只是为了让自己更清楚,以下代码在 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;
}

最佳答案

你可以用这个

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

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

关于c# - 从文件夹中拖放文件 c# wpf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49668428/

相关文章:

c# - 在 FileStream 弹出响应后删除临时文件

wpf - 在 WPF 中的单个 GeometryDrawing 中使用多个画笔

c# - ComboBox SelectedItem 未显示其值

c# - 将 ContentControl 绑定(bind)到 UserControl,并重用同一实例

javascript - 如何构建具有连接数据库的拖放 Web 应用程序?

javascript - 拖放验证码

c# - 如何批量循环遍历IEnumerable

c# - 从 C# 检测操作系统语言

c# - 有没有人为缺少的 MVC 3 html 表单字段助手提供一个很棒的库?

javascript - 由 javascript 创建的 HTML5 拖放元素 :