注释
unity打开文件文件夹的方法
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;}}
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);}