1. 程式人生 > >Unity3D 呼叫系統視窗選擇檔案 讀存

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";
            }
        }
    }
}