You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中使用FolderBrowserDialog检测选中路径状态与文件夹内文件属性

WPF项目FolderBrowserDialog 功能扩展实现

需求对应实现逻辑

  • 空值/null路径校验:先判断对话框返回的操作结果,再通过string.IsNullOrEmpty校验选中路径的有效性,补充路径存在性校验规避边界异常
  • 空文件夹判断:采用懒加载枚举的方式检测目录内容,无需一次性加载全量文件列表,大目录下判断性能更优
  • 文件扩展名提取:遍历目标路径下的文件,提取扩展名后自动去重,可按需配置是否递归读取子文件夹内容

改造后完整可运行代码

前置依赖:需在代码顶部引入两个命名空间,否则会触发编译报错

  • using System.IO; 提供路径、文件操作能力
  • using System.Linq; 提供集合遍历判断能力
try
{
    using (var dialog = new System.Windows.Forms.FolderBrowserDialog())
    {
        System.Windows.Forms.DialogResult result = dialog.ShowDialog();
        
        // 实现需求1:校验选中路径为null/空、用户取消选择的场景
        if (result != System.Windows.Forms.DialogResult.OK || string.IsNullOrEmpty(dialog.SelectedPath))
        {
            FileText.Text = string.Empty;
            return;
        }
        string selectedPath = dialog.SelectedPath;
        FileText.Text = selectedPath;

        // 边界防护:校验路径是否真实存在(避免选中后路径被手动删除的异常)
        if (!Directory.Exists(selectedPath))
        {
            MessageBox.Show("选中的文件夹已不存在");
            return;
        }

        // 实现需求2:判断是否为空文件夹
        bool isEmptyFolder = !Directory.EnumerateFileSystemEntries(selectedPath).Any();
        if (isEmptyFolder)
        {
            MessageBox.Show("选中的文件夹是空文件夹");
            return;
        }

        // 实现需求3:获取文件夹内所有文件的扩展名(自动去重、忽略大小写差异)
        // 如需递归读取所有子文件夹的文件,将SearchOption.TopDirectoryOnly替换为SearchOption.AllDirectories即可
        var extensionSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
        foreach (var filePath in Directory.EnumerateFiles(selectedPath, "*.*", SearchOption.TopDirectoryOnly))
        {
            string ext = Path.GetExtension(filePath).ToLowerInvariant();
            if (!string.IsNullOrEmpty(ext))
            {
                extensionSet.Add(ext);
            }
        }
        // extensionSet为提取完成的去重扩展名集合,可按需存储、展示
        MessageBox.Show($"文件夹内包含的文件类型:{string.Join("、", extensionSet)}");
    }
}
catch (UnauthorizedAccessException)
{
    MessageBox.Show("无权限访问该文件夹,请更换目录重试");
}
catch (Exception exp)
{
    Console.WriteLine("Error : " + exp);
}

关键实现说明

  • 空文件夹判断未使用Directory.GetFiles()这类一次性全量加载的方法,而是通过EnumerateFileSystemEntries懒加载枚举,检测到第一个文件/子文件夹即可终止判断,大幅降低大目录下的判断耗时
  • 扩展名收集阶段使用HashSet配合忽略大小写的比较器,避免.TXT和.txt被重复统计的问题
  • 单独捕获UnauthorizedAccessException权限异常,给用户更明确的操作提示,避免笼统的异常反馈影响使用体验

内容的提问来源于stack exchange,提问作者user6358496

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 08:06:03