using UnityEngine; using System.Collections; using System; using System.Runtime.InteropServices; namespace Public.File { [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 DllTest { [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] public static extern bool GetOpenFileName([In, Out] OpenFileName ofn); public static bool GetOpenFileName1([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 GetSaveFileName1([In, Out] OpenFileName ofn) { return GetSaveFileName(ofn); } } public class OpenWindow { /// /// 获取指定文件路径 /// /// 待选择的文件夹路径 /// 文件后缀限定,格式为 "Excel Files(*.xlsx:*.xls)\0*.xlsx:*.xls\0",默认可选任何文件 /// public static string GetFilePath(string title,string path=null,string filter=null) { OpenFileName ofn = new OpenFileName(); ofn.structSize = Marshal.SizeOf(ofn); if (!string.IsNullOrEmpty(filter)) ofn.filter = filter; else ofn.filter = "All Files\0*.*\0\0"; ofn.file = new string(new char[256]); ofn.maxFile = ofn.file.Length; ofn.fileTitle = new string(new char[64]); ofn.maxFileTitle = ofn.fileTitle.Length; if(path==null) ofn.initialDir = UnityEngine.Application.dataPath.Replace('/', '\\');//默认路径 else ofn.initialDir = path.Replace('/','\\');//指定路径 ofn.title = title; ofn.defExt = "xml"; //注意 一下项目不一定要全选 但是0x00000008项不要缺少 ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR //打开windows框 if (DllTest.GetOpenFileName(ofn)) { string replay_file_name = ofn.file.ToString(); Debug.Log(replay_file_name); return replay_file_name; } else return null; } } }