unity设定(选择)文件夹,并读取里面的文件或固定格式的文件

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;
/// <summary>
/// 选择文件框
/// </summary>
public class OpenDialogFile1 : MonoBehaviour
{

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]

    public class OpenDialogFile
    {
        public int structSize = 0;
        public IntPtr dlgOwner = IntPtr.Zero;
        public IntPtr instance = IntPtr.Zero;
        public String filter = null;
        public String customFilter = null;
        public int maxCustFilter = 0;
        public int filterIndex = 0;
        public String file = null;
        public int maxFile = 0;
        public String fileTitle = null;
        public int maxFileTitle = 0;
        public String initialDir = null;
        public String title = null;
        public int flags = 0;
        public short fileOffset = 0;
        public short fileExtension = 0;
        public String defExt = null;
        public IntPtr custData = IntPtr.Zero;
        public IntPtr hook = IntPtr.Zero;
        public String templateName = null;
        public IntPtr reservedPtr = IntPtr.Zero;
        public int reservedInt = 0;
        public int flagsEx = 0;
    }
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class OpenDialogDir
    {
        public IntPtr hwndOwner = IntPtr.Zero;
        public IntPtr pidlRoot = IntPtr.Zero;
        public String pszDisplayName = null;
        public String lpszTitle = null;
        public UInt32 ulFlags = 0;
        public IntPtr lpfn = IntPtr.Zero;
        public IntPtr lParam = IntPtr.Zero;
        public int iImage = 0;
    }

    public class DllOpenFileDialog
    {
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetOpenFileName([In, Out] OpenDialogFile ofn);

        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetSaveFileName([In, Out] OpenDialogFile ofn);

        [DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern IntPtr SHBrowseForFolder([In, Out] OpenDialogDir ofn);

        [DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool SHGetPathFromIDList([In] IntPtr pidl, [In, Out] char[] fileName);

    }

    string fullDirPath;
    /// <summary>
    /// 选择文件夹。
    /// </summary>
    public void QQ()
    {
        OpenDialogDir ofn2 = new OpenDialogDir();
        ofn2.pszDisplayName = new string(new char[2000]); ;     // 存放目录路径缓冲区    
        ofn2.lpszTitle = "Open Project";// 标题    
                                        // ofn2.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 新的样式,带编辑框   

        IntPtr pidlPtr = DllOpenFileDialog.SHBrowseForFolder(ofn2);

        char[] charArray = new char[2000];
        for (int i = 0; i < 2000; i++)
            charArray[i] = '\0';

        DllOpenFileDialog.SHGetPathFromIDList(pidlPtr, charArray);
        fullDirPath = new String(charArray);


        fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0'));


        Debug.Log("***选择储存的文件夹,将要储存到**" + fullDirPath);//这个就是选择的目录路径。  
    }
    /// <summary>
    /// 获取对应文件夹 文件
    /// </summary>
    public void GetFiles()
    {
        //路径 
        string path = fullDirPath; //string.Format("{0}", @"D:\SHU170221U3D-09\Lesson14\Assets\StreamingAssets");         + @"/_Image/grid.png"
        Debug.Log("想要读取的文件夹是************" + path);

        string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG";
        string[] ImageType = imgtype.Split('|');

        //获取指定路径下面的所有资源文件  
        if (Directory.Exists(path))
        {
            DirectoryInfo direction = new DirectoryInfo(path);
            FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);   //   获取所有文件
            Debug.Log("该文件夹文件总数为" + files.Length);

            //for (int i = 0; i < files.Length; i++)       //获取所有文件名称
            //{
            //    if (files[i].Name.EndsWith(".meta"))
            //    {
            //        continue;
            //    }
            //    // Debug.Log("Name:" + files[i].Name);
            //    //Debug.Log("FullName:" + files[i].FullName);
            //    // Debug.Log("DirectoryName:" + files[i].DirectoryName);
            //}

            for (int i = 0; i < ImageType.Length; i++)
            {
                //获取d盘中a文件夹下所有的图片路径  
                string[] dirs = Directory.GetFiles(path, ImageType[i]);
                for (int j = 0; j < dirs.Length; j++)
                {
                    if (files[j].Name.EndsWith(".meta"))
                    {
                        continue;
                    }
                    Debug.Log("文件夹图片格式的Name:" + files[j].Name);
                }

            }
        }
    }
}

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值