Unity3D 调用系统窗口选择文件 读存

1.新建脚本OpenFileName

2.新建脚本FileManager

using System;
using System.Runtime.InteropServices;

//脚本OpenFileName
[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 = 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;
}

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);
    }
}
using System.Runtime.InteropServices;
//脚本FileManager
public static class FileManager
{
    private static OpenFileName OpenFileManager(string str)
    {
        OpenFileName openFileName = new OpenFileName();
        openFileName.structSize = Marshal.SizeOf(openFileName);
        //文件类型 config配置文件,"Excel文件(*.xlsx)\0*.xlsx" ,"Txt文件(*.txt)\0*.txt"...
        openFileName.filter = "config文件(*.conf)\0*.conf";
        openFileName.file = new string(new char[256]);//new一个256字符的string
        openFileName.maxFile = openFileName.file.Length;//获取256字符的string的长度作为最大
        openFileName.fileTitle = new string(new char[64]);//64字符的string
        openFileName.maxFileTitle = openFileName.fileTitle.Length;//文件标题的最大长度
        openFileName.initialDir = UnityEngine.Application.dataPath;//默认路径
        openFileName.title = str;//文件标题
        openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;
        return openFileName;
    }

    public static void OpenFile()
    {
        OpenFileName openFileName = OpenFileManager("OpenFile");
        if (LocalDialog.GetOpenFileName(openFileName))
        {

        }
    }

    public static void SaveFile()
    {
        OpenFileName openFileName = OpenFileManager("SaveFile");
        if (LocalDialog.GetSaveFileName(openFileName))
        {
            var nowPath = openFileName.file;
            if (!nowPath.EndsWith(".conf"))//是不是以".conf"结尾
            {
                nowPath = openFileName.file + ".conf";
            }
        }
    }
}

 

 

你可能感兴趣的:(Unity_Code)