Unity 調用Windows打開、保存窗口並獲取文件路徑

文件日誌

using System.Runtime.InteropServices;
using System;


/// <summary>
/// 文件日誌類
/// </summary>
// [特性(佈局種類.有序,字符集=字符集.自動)]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class ChinarFileDlog
{
    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 OpenFileDlg : ChinarFileDlog
{
}

public class OpenFileDialog
{
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetOpenFileName([In, Out] OpenFileDlg ofd);
}

public class SaveFileDialog
{
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetSaveFileName([In, Out] SaveFileDlg ofd);
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class SaveFileDlg : ChinarFileDlog
{
}

打開文件

保存文件至文件夾

using UnityEngine;
using System.Runtime.InteropServices;
using System;


/// <summary>
/// 文件控制腳本
/// </summary>
public class ChinarFileController : MonoBehaviour
{
    /// <summary>
    /// 打開項目
    /// </summary>
    public void OpenProject()
    {
        OpenFileDlg pth  = new OpenFileDlg();
        pth.structSize   = Marshal.SizeOf(pth);
        pth.filter       = "All files (*.*)|*.*";
        pth.file         = new string(new char[256]);
        pth.maxFile      = pth.file.Length;
        pth.fileTitle    = new string(new char[64]);
        pth.maxFileTitle = pth.fileTitle.Length;
        pth.initialDir   = Application.dataPath.Replace("/", "\\") + "\\Resources"; //默認路徑
        pth.title        = "打開項目";
        pth.defExt       = "dat";
        pth.flags        = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
        if (OpenFileDialog.GetOpenFileName(pth))
        {
            string filepath = pth.file; //選擇的文件路徑;  
            Debug.Log(filepath);
        }
    }


    /// <summary>
    /// 保存文件項目
    /// </summary>
    public void SaveProject()
    {
        SaveFileDlg pth  = new SaveFileDlg();
        pth.structSize   = Marshal.SizeOf(pth);
        pth.filter       = "All files (*.*)|*.*";
        pth.file         = new string(new char[256]);
        pth.maxFile      = pth.file.Length;
        pth.fileTitle    = new string(new char[64]);
        pth.maxFileTitle = pth.fileTitle.Length;
        pth.initialDir   = Application.dataPath; //默認路徑
        pth.title        = "保存項目";
        pth.defExt       = "dat";
        pth.flags        = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
        if (SaveFileDialog.GetSaveFileName(pth))
        {
            string filepath = pth.file; //選擇的文件路徑;  
            Debug.Log(filepath);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章