Unity | 打开文件对话框批量选择文件

2023-05-16

之前在新浪博客写了一篇关于打开文件对话框批量选择文件的文章,可惜新浪博客不能写代码,奈何当时太年轻,并不觉得不方便,直到遇到CSDN...emmm,不想将就了,所以在这里更新一波,并补充其他的方法:

  • 原文的方法一

1. 源码如下:

            System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog();
            dlg.Multiselect = true;
            dlg.RestoreDirectory = false;
            dlg.ValidateNames = true;
            dlg.FilterIndex = 1;
            dlg.Filter = "图片文件(*.jpg;*.png;*.jpeg)|*.jpg;*.png;*.jpeg|pdf文件|*.pdf|所有文件|*."; //"文本文件|*.*|C#文件|*.cs|所有文件|*.*";// "图片文件或PDF文件(*.jpg;*.png;*.jpeg;*.pdf)|*.jpg;*.png;*.jpeg;*.pdf";
            dlg.InitialDirectory = "C:\\";
            dlg.Title = "请选择要识别的图片或pdf";

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                for (int i = 0; i < dlg.FileNames.Length; i++)
                {
                    Debug.Log(dlg.FileNames.GetValue(i).ToString());
                }
            }

2. 缺点:窗口风格旧、打包后运行有问题(看不到文件夹):

  • 原文的方法二

1. 源码如下:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName
{
    public int structSize;
    public IntPtr dlgOwner;
    public IntPtr instance;
    public string filter;
    public string customFilter;
    public int maxCustFilter;
    public int filterIndex;
    public string file;
    public int maxFile;
    public string fileTitle;
    public int maxFileTitle;
    public string initialDir;  //打开路径     null
    public string title;
    public int flags;
    public short fileOffset;
    public short fileExtension;
    public string defExt;
    public IntPtr custData;
    public IntPtr hook;
    public string templateName;
    public IntPtr reservedPtr;
    public int reservedInt;
    public int flagsEx;
}
    void OpenOfnInit()
    {
        Openofn = new OpenFileName();
        Openofn.structSize = Marshal.SizeOf(Openofn);
        Openofn.dlgOwner = DllScript.GetForegroundWindow();
        Openofn.filter = "图片文件或PDF文件(*.jpg;*.png;*.jpeg;*.pdf)\0*.jpg;*.png;*.jpeg;*.pdf\0";
        Openofn.file = new string(new char[1024]);
        Openofn.maxFile = Openofn.file.Length;
        Openofn.fileTitle = new string(new char[64]);
        Openofn.maxFileTitle = Openofn.fileTitle.Length;
        Openofn.initialDir = "C:\\";
        Openofn.title = "选择图片或PDF文件";
        Openofn.defExt = "PDF";
        Openofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;   //OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR    
    }
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
if (GetOpenFileName(Openofn))
{
    string[] SplitStr = { "\0" };
    string[] strs = Openofn.file.Split(SplitStr, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < strs.Length; i++)
    {
        Debug.Log(strs[i]);
    }
}

2. 缺点:发布32位时只能单选文件:去掉0x00000200;

  • 方法三:只能在Unity 编辑器窗口内使用
  string[] fliter = { "图片或pdf", "jpg;*.png;*.jpeg;*.pdf" };
  string path = UnityEditor.EditorUtility.OpenFilePanelWithFilters("Overwrite with png", "C:\\", fliter);
  • 针对方法一,补充一个打开文件夹的方法:
            System.Windows.Forms.FolderBrowserDialog _dlg = new System.Windows.Forms.FolderBrowserDialog();

            if (_dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Debug.Log(_dlg.SelectedPath);

            }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity | 打开文件对话框批量选择文件 的相关文章

随机推荐

  • ROS报错备忘:IOError: [Errno 13] Permission denied: '/home/lishuwei/.ros/roscore-11311.pid'

    1 roscore启动出差 IOError Errno 13 Permission denied 39 home lishuwei ros roscore 11311 pid 39 解决 xff1a 这个问题是由于该路径下ros文件权限造成
  • c语言实践-图像缩放

    简单代码实现 xff1a include lt stdio h gt include lt stdlib h gt include lt memory h gt define HEIGHT 1080 define WIDTH 1440 in
  • ros-melodic-docker安装和使用

    本人小白一个 xff0c 为了简单使用镜像 xff0c 简化操作 xff0c 参考泡泡机器人基础上 xff0c 搞了一些操作 xff0c 欢迎大佬来指出错误 xff0c 优化方案 xff0c 也可以提需求哈哈哈 构建docker镜像 xff
  • 一个完整的Windows驱动程序示例(应用与内核通信)

    驱动程序DriverEntry c span class token macro property span class token directive keyword include span span class token strin
  • 密码认证-SHA加盐密码

    密码认证 xff0c 首先是密码加密算法 xff0c 然后密码咋存储 xff0c 如图所示 密码加密分为不可加密和可逆加密算法 安全存储策略 xff0c 有明文保存和加盐保存 xff0c 明文保持容易导致密码丢失 xff0c 一般采用加盐密
  • c++/c-获取随机长度的字符串

    实现跨平台的实现随机长度的字符串获取 xff0c 两种方法 xff1a 随机字符串实现1 xff1a std random device rd std mt19937 generator rd std string get uuid int
  • Linux-常用软件源整理

    目录 1 ubuntu软件源 2 Centos软件源 1 ubuntu软件源 步骤1 xff1a 打开 etc apt sources list sudo gedit etc apt sources list 步骤2 xff1a 在文件中添
  • 机器人专业需要学习那些理论知识

    专业与产业 我认为 xff0c 机器人是一门应用性比较强的专业 xff0c 如果脱离应用背景 xff0c 那么就不容易理解和把握机器人的发展 所以我开篇先不谈 专业 而要谈 产业 xff0c 专业 和 产业 一字之差 xff0c 它们有什么
  • 机器人控制算法

    工业机器人的算法分为感知算法和控制算法 xff0c 更进一步细分为环境感知算法 xff0c 路径规划和行为决策算法 xff08 ai xff0c 运动控制算法 xff0c 后两个也可以统称为控制算法 环境感知算法获取环境各种数据 机器人视觉
  • Windows的active工具

    链接 https pan baidu com s 1gjp 67E3y4Vj3a8s n8dOA 提取码 u4ny 软件解压 xff0c 右键管理员运行Activation cmd 确认是否永久active xff0c 可以在命令提示符执行
  • Bundle Adjustment简述

    转载https blog csdn net OptSolution article details 64442962 在SFM xff08 structure from motion xff09 的计算中BA xff08 Bundle Ad
  • 基于ROS平台的STM32小车-2-小车底盘控制

    本博文将介绍小车底盘控制的原理 xff0c 如PID控制 xff0c 控制程序的编写等 小车控制思想 控制电机转动 电机的控制我们分为两部分 xff0c 一部分为电机转动方向的控制 xff0c 另一个为电机转速的控制 电机转动的方向我们用两
  • Pangolin 安装及其使用

    Pangolin是对OpenGL进行封装的轻量级的OpenGL输入 输出和视频显示的库 可以用于3D视觉和3D导航的视觉图 xff0c 可以输入各种类型的视频 并且可以保留视频和输入数据用于debug 安装 安装的链接是Pangolin的地
  • KPI异常检测

    异常 xff1a 预期值与真实值有很大的差异 统计的方法 3 sigma 刻画异常的程度 xff0c 数据需要接近高斯分布 xff0c 如果不是可以通过高斯分布或者tan变换 可以先看一下数据分布图 xff0c 看一下数据的分布情况 box
  • 如何干掉那又丑又长的switch..case语句

    1 前言 在实际的编程中 xff0c 我们经常会使用到switch case语句 xff0c 这通常也是对一长串if else if语句的优化 对于一些简单的情况 xff08 只每个case代码中代码长度不会很长 xff0c 而且case分
  • 编译安装Openvins过程中遇到的问题

    openvins的编译是依赖opencv contrib库的 xff0c 需要重新下载编译安装opencv xff0c opencv和opencv contrib的版本要对应一致 遇到问题的解决方法参考如下链接 xff1a https bl
  • docker镜像启动后端口号是多少_RSS、智能家居、个人博客、维基百科……Docker 入门指南...

    如果你购买过 VPS 云主机 xff0c 那么或多或少 xff0c 你都可能听说过 Docker 如果你从未听说过 Docker xff0c 那么本文可能能够为你开启新世界 利用 Docker xff0c 你能够非常轻松地部署各类服务 xf
  • linux can接收数据出错,CAN为什么会发送失败

    CAN总线调试过程中出现报文发送失败 xff0c 很多工程师都对此只知其一不知其二 xff0c 这里就CAN报文发送失败的问题我们来做一次探讨 在了解CAN报文为什么会发送失败之前我们先看看一条正确的CAN报文到底应该是怎么样的 xff0c
  • Unity | 总结:OCR文字识别、公式识别

    一 功能简介 xff1a 最近在做一个项目 xff1a 运用OCR文字识别 公式识别 手写英文识别等AI技术 xff0c 当用户批量导入图片或者PDF文件时可快速识别为可编辑文本 xff0c 该项目主要功能有 xff1a 印刷体识别 手写英
  • Unity | 打开文件对话框批量选择文件

    之前在新浪博客写了一篇关于打开文件对话框批量选择文件的文章 xff0c 可惜新浪博客不能写代码 xff0c 奈何当时太年轻 xff0c 并不觉得不方便 xff0c 直到遇到CSDN emmm xff0c 不想将就了 xff0c 所以在这里更