unity 打开项目路径无效_Unity打开Windows文件夹选择路径

使用OpenFile.OpenWinFile(InputField);将路径保存到传入的参数InputField输入框中。

/***********************

* Title:

* FileName:

* Date: 2020

* Author: 玄策

* Version: 1.0

* UnityVersion: 2019.2.4f1

* Description:

* Func:

* -

***********************/

using System;

using System.Collections;

using System.Collections.Generic;

using System.Runtime.InteropServices;

using UnityEngine;

using UnityEngine.UI;

public class OpenFile : MonoBehaviour

{

public static void OpenWinFile(InputField InpF)

{

//使用如下:

OpenDialogDir ofn2 = new OpenDialogDir();

ofn2.pszDisplayName = new string(new char[2048]); ; // 存放目录路径缓冲区

ofn2.lpszTitle = "选择保存路径";// 标题

//ofn2.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 新的样式,带编辑框

//IntPtr pidlPtr = IntPtr.Zero;

IntPtr pidlPtr = DllOpenFileDialog.SHBrowseForFolder(ofn2);

char[] charArray = new char[2048];

for (int i = 0; i < 2048; i++)

charArray[i] = '\0';

DllOpenFileDialog.SHGetPathFromIDList(pidlPtr, charArray);

string fullDirPath = new String(charArray);

fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0'));

Debug.Log(fullDirPath);//这个就是选择的目录路径

InpF.text = fullDirPath;

}

public static void OpenWinFile()

{

//使用如下:

OpenDialogDir ofn2 = new OpenDialogDir();

ofn2.pszDisplayName = new string(new char[2000]); ; // 存放目录路径缓冲区

ofn2.lpszTitle = "Open Project";// 标题

//ofn2.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 新的样式,带编辑框

IntPtr pidlPtr = DllOpenFileDialog.SHBrowseForFolder(ofn2);

char[] charArray = new char[2000];

for (int i = 0; i < 2000; i++)

charArray[i] = '\0';

DllOpenFileDialog.SHGetPathFromIDList(pidlPtr, charArray);

string fullDirPath = new String(charArray);

fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0'));

Debug.Log(fullDirPath);//这个就是选择的目录路径

}

}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]

public class OpenDialogFile

{

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;

}

[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 UInt32 ulFlags = 0;

public IntPtr lpfn = IntPtr.Zero;

public IntPtr lParam = IntPtr.Zero;

public int iImage = 0;

}

public class DllOpenFileDialog

{

[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]

public static extern bool GetOpenFileName([In, Out] OpenDialogFile ofn);

[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]

public static extern bool GetSaveFileName([In, Out] OpenDialogFile 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);

}


版权声明:本文为weixin_33977572原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。