Unity3D 呼叫系統視窗選擇檔案 讀存
阿新 • • 發佈:2018-11-28
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"; } } } }