public static UserConfig SaveIni_UserCfg(string inifn)
        {
            //ファイル名
            string fileIni = @"UnityInjector\Config\XtMsterSlave\User_SaveData\" + inifn;

            //bool isExist = false;

            try
            {
                string xfn = extpath(fileIni);
                Console.WriteLine("ユーザーセーブini設定読み込み :" + xfn);

                UserConfig uc = new UserConfig();
                uc.cfg_h      = SharedConfig.ReadConfig <UserConfigHeader>("Config", xfn);
                uc.cfg_h.Memo = uc.cfg_h.Memo.Replace("<改行>", "\r\n");
                //tmpc.Memo = tmpc.Memo.Replace("<改行>", "\n");

                for (int i = 0; i < XtMasterSlave.MAX_PAGENUM; i++)
                {
                    uc.cfgs_p[i] = SharedConfig.ReadConfig <UserConfigPage>("Page-" + (i + 1).ToString(), xfn);
                }

                for (int i = 0; i < uc.cfgs_ms.Length; i++)
                {
                    SharedConfig.SaveConfig("Config-" + (i + 1).ToString(), xfn, uc.cfgs_ms[i]);
                }

                /*
                 * for (int i = 0; i < cfgs.Length; i++)
                 * {
                 *  v3ofs[i].v3StackOffset = faTov3(cfgs[i].v3StackOffsetFA);
                 *  v3ofs[i].v3StackOffsetRot = faTov3(cfgs[i].v3StackOffsetRotFA);
                 *  v3ofs[i].v3HandLOffset = faTov3(cfgs[i].v3HandLOffsetFA);
                 *  v3ofs[i].v3HandROffset = faTov3(cfgs[i].v3HandROffsetFA);
                 * }*/

                return(uc);
            }
            catch (Exception e)
            {
                UnityEngine.Debug.Log("XtMs+INI Error:" + e);
            }

            return(null);
        }
        //プリセット用INIファイル読み書き
        public static bool SaveIni_UserCfg(string inifn, UserConfig uc)
        {
#if COM3D2
            string saveDirPath = Path.Combine(getPlginDir(), @"Config\");
            //ファイル名
            string fileIni = saveDirPath + @"XtMasterSlave\User_SaveData\" + inifn;
#else
            string fullpath    = Path.GetFullPath(".\\");
            string saveDirPath = Path.Combine(fullpath, @"Sybaris\Plugins\UnityInjector\Config\");
            //ファイル名
            //string fileIni = @"UnityInjector\Config\XtMsterSlave\User_SaveData\" + inifn;
            string fileIni = saveDirPath + @"XtMsterSlave\User_SaveData\" + inifn;
#endif
            string xfn       = extpath(fileIni);
            bool   isSuccess = false;
            string strfn_d   = null;
            try
            {
                if (File.Exists(fileIni))
                {
                    var msgo = "上書きしますか?\r\nファイル名: " + inifn;
                    var reto = NUty.WinMessageBox(NUty.GetWindowHandle(), msgo, "( ! )", NUty.MSGBOX.MB_OKCANCEL | NUty.MSGBOX.MB_ICONQUESTION);
                    if (reto != (int)System.Windows.Forms.DialogResult.OK)
                    {
                        msgo = "保存はキャンセルされました";
                        NUty.WinMessageBox(NUty.GetWindowHandle(), msgo, "( ! )", NUty.MSGBOX.MB_OK);
                        return(false);
                    }
                    else
                    {
                        strfn_d = fileIni + ".bak";
                        File.Move(fileIni, strfn_d);
                    }
                }

                if (!File.Exists(fileIni))
                {
                    Console.WriteLine("ユーザーセーブini設定書き込み :" + xfn);

                    uc.cfg_h.Memo = uc.cfg_h.Memo.Replace("\n", "<改行>");
                    uc.cfg_h.Memo = uc.cfg_h.Memo.Replace("\r", "");
                    SharedConfig.SaveConfig("Config", xfn, uc.cfg_h);

                    for (int i = 0; i < XtMasterSlave.MAX_PAGENUM; i++)
                    {
                        //前後のスペースがトリムされるようなので""でエスケープする
                        uc.cfgs_p[i].Master_Name = uc.cfgs_p[i].Master_Name.dq_();
                        uc.cfgs_p[i].Slave_Name  = uc.cfgs_p[i].Slave_Name.dq_();

                        SharedConfig.SaveConfig("Page-" + (i + 1).ToString(), xfn, uc.cfgs_p[i]);
                    }

                    for (int i = 0; i < uc.cfgs_ms.Length; i++)
                    {
                        SharedConfig.SaveConfig("Config-" + (i + 1).ToString(), xfn, uc.cfgs_ms[i]);
                    }
                }
                if (strfn_d != null && File.Exists(strfn_d))
                {
                    File.Delete(strfn_d);
                }
            }
            catch (Exception e)
            {
                UnityEngine.Debug.Log("api+INI SaveError:" + e);

                var msg = "ファイル保存に失敗しました\r\nファイル名:" + inifn + "\r\n" + e.Message;
                NUty.WinMessageBox(NUty.GetWindowHandle(), msg, "( ! )", NUty.MSGBOX.MB_OK | NUty.MSGBOX.MB_ICONERROR);
            }
            return(isSuccess);
        }