Unity打开文件,文件夹

注释

unity打开文件文件夹的方法

cpp 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;

public class FilePathHelper
{
    private static string filePath;

    /// <summary>
    /// 选择文件路径
    /// </summary>
    /// <returns>文件路径</returns>
    public static string SelectFilePath()
    {
        OpenFileName openFileName = new OpenFileName();
        openFileName.structSize = Marshal.SizeOf(openFileName);
        openFileName.filter = "All Files\0*.*\0\0"; ;
        openFileName.file = new string(new char[256]);
        openFileName.maxFile = openFileName.file.Length;
        openFileName.fileTitle = new string(new char[64]);
        openFileName.maxFileTitle = openFileName.fileTitle.Length;
        openFileName.initialDir = UnityEngine.Application.streamingAssetsPath.Replace('/', '\\');//默认路径
        openFileName.title = "窗口标题";
        openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;

        if (LocalDialog.GetSaveFileName(openFileName))
        {
            Debug.Log(openFileName.file);
            filePath = openFileName.file;
            return filePath;

        }
        return null;
    }

    /// <summary>
    /// 选择文件储存路径
    /// </summary>
    /// <returns>路径</returns>
    public static string SelectStorePath()
    {
        OpenDialogDir openDialogDir = new OpenDialogDir();
        //存放目录路径缓冲区
        openDialogDir.pszDisplayName = new string(new char[2000]);
        openDialogDir.lpszTitle = "文件路径";
        IntPtr pidlPtr = LocalDialog.SHBrowseForFolder(openDialogDir);
        char[] charArray = new char[2000];
        for (int i = 0; i < 2000; i++)
        {
            charArray[i] = '\0';
        }
        LocalDialog.SHGetPathFromIDList(pidlPtr, charArray);
        string fullDirPath = new string(charArray);
        fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0'));
        Debug.Log(fullDirPath);
        if (fullDirPath == string.Empty)
        {
            return null;
        }
        return fullDirPath;
    }

}
cpp 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
/// <summary>
/// 打开Windows窗口的基类
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName
{
    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 = Application.streamingAssetsPath.Replace('/','\\');
    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 uint ulFlags = 0;
    public IntPtr lpfn = IntPtr.Zero;
    public IntPtr lParam = IntPtr.Zero;
    public int iImage = 0;

}
public class LocalDialog

{
    //链接指定系统函数       打开文件对话框
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
    public static bool GetOFN([In, Out] OpenFileName ofn)
    {
        return GetOpenFileName(ofn);
    }

    //链接指定系统函数        另存为对话框
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetSaveFileName([In, Out] OpenFileName ofn);
    public static bool GetSFN([In, Out] OpenFileName ofn)
    {
        return GetSaveFileName(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);

}
相关推荐
两水先木示5 小时前
【Unity3D】ECS入门学习(九)SystemBase
学习·unity·ecs
吴梓穆14 小时前
Unity EasyAR入门教程
unity
两水先木示20 小时前
【Unity3D】ECS入门学习(七)缓存区组件 IBufferElementData
学习·unity·ecs
EQ-雪梨蛋花汤1 天前
【WebAR-图像跟踪】在Unity中基于Imagine WebAR实现AR图像识别
unity·游戏引擎·ar
Thinbug1 天前
UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
游戏引擎·虚幻
子燕若水1 天前
UE(虚幻引擎)运行项目时缺少插件/摸块,需要手动编译
游戏引擎·虚幻
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇32】C#其他不常用的泛型数据结构类、顺序存储和链式存储
java·开发语言·数据结构·unity·c#·游戏引擎
虾球xz1 天前
游戏引擎学习第64天
redis·学习·游戏引擎
虾球xz1 天前
游戏引擎学习第63天
学习·游戏引擎
两水先木示1 天前
【Unity3D】ECS入门学习(六)状态组件 ISystemStateComponentData
学习·unity·ecs