/*
     * 打开选择文件的窗口
     * 参数:
     * cb:选择文件后的回调
     * folderName:窗口名
     */
    public static void FindFileDir(GetDirCallBack cb, string folderName = "窗口标题")
    {
        OpenFileName openFileName = new OpenFileName();

        openFileName.structSize   = Marshal.SizeOf(openFileName);
        openFileName.filter       = "";// "Excel文件(*.xlsx)\0*.xlsx";
        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   = Application.streamingAssetsPath.Replace('/', '\\');//默认路径
        openFileName.title        = folderName;
        openFileName.flags        = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;

        if (LocalDialog.GetOpenFileName(openFileName))
        {
            cb(openFileName);
        }
    }
    /*
     * 打开选择文件夹窗口
     * 参数:
     * cb:选择文件后的回调
     * folderName:窗口名
     */
    public static void SelectDir(GetDirCallBack cb, string folderName = "窗口标题")
    {
        OpenDialogDir ofn2 = new OpenDialogDir();

        ofn2.pszDisplayName = new string(new char[2000]);; // 存放目录路径缓冲区
        ofn2.lpszTitle      = folderName;                  // 标题
        //ofn2.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 新的样式,带编辑框
        IntPtr pidlPtr = LocalDialog.SHBrowseForFolder(ofn2);

        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.Trim('\0');
        OpenFileName openFileName = new OpenFileName();

        openFileName.file = fullDirPath;
        cb(openFileName);
    }