示例#1
0
        //────────────────────────────────────────

        public virtual string Lv5_Implement(
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Execute5_Main", log_Reports);

            string    result;
            Exception err_Excp;

            try
            {
                result = this.dictionary_P1p[this.numberP1p];
            }
            catch (KeyNotFoundException e)
            {
                // エラー
                err_Excp = e;
                goto gt_Error_KeyNotFound;
            }

            goto gt_EndMethod;
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_KeyNotFound:
            {
                result = "";
                if (log_Reports.CanCreateReport)
                {
                    Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                    r.SetTitle("▲エラー211!", log_Method);

                    Log_TextIndented t = new Log_TextIndentedImpl();
                    t.Append("テキスト_テンプレートの引数 p");
                    t.Append(this.numberP1p);
                    t.Append("p の取得に失敗しました。");
                    t.Newline();

                    // ヒント
                    t.Append(r.Message_SException(err_Excp));

                    r.Message = t.ToString();
                    log_Reports.EndCreateReport();
                }
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result);
        }
示例#2
0
        //────────────────────────────────────────

        /// <summary>
        /// 「ディレクトリー」と「入力値」の2つを入力すると、「絶対パス」を返します。
        ///
        /// ──────────
        ///
        /// 未設定の場合は、空文字列を返します。
        /// ※bug:フォルダーパスの場合も空文字列になる??
        ///
        /// ・ファイルパスとして利用できない文字や、予約語が含まれていると例外を投げます。
        /// ・絶対パスの文字列の長さが、ファイルシステムで使える制限を越えると例外を投げます。
        ///
        /// もし、設定されたパスが相対パスだった場合に、ベース・パスが設定されていなければ、
        /// 起動「.exe」のあったパスが頭に付く。
        /// </summary>
        /// <param name="baseDirectory"></param>
        /// <param name="humanInputText"></param>
        /// <param name="flagCheckPathTooLong">絶対パスの文字列の長さが、ファイルシステムで使える上限を超えていた場合に真、そうでない場合 偽にセットされます。</param>
        /// <param name="okPathTooLong">絶対パスの文字列の長さが、ファイルシステムで使える上限を超えていた場合に、「正常扱いにするなら」真、「エラー扱いにするなら」偽。</param>
        /// <param name="cur_Conf">デバッグ用情報。人間オペレーターが修正するべき箇所などの情報。</param>
        /// <returns></returns>
        public static string ToFilepathabsolute(
            string directory_Base,
            string humaninput,
            ref bool ref_IsTooLong_Path,
            bool isSafe_TooLong_Path,
            Log_Reports log_Reports,
            Configuration_Node cur_Conf
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, "Utility_Configurationtree_Filepath", "ToFilepathabsolute②", log_Reports);
            //
            //

            //
            // 修正履歴(2009-12-02)
            //
            // ・カレント・ディレクトリの移動を使ったコードを書いてはいけない。
            //   MS-DOSの名残り?
            //
            // ・起動「.exe」のディレクトリは Application.StartupPath で取得できる。
            //
            // ・備考:
            // System.IO.Directory.GetCurrentDirectory()は、
            // 「プロセスが開始されたディレクトリ」を返すので、
            // openFileDialogで開いたディレクトリを返すこともある。
            //
            // System.IO.Path.GetFullPath(path)も同じ。

            Exception err_Excp;

            string result_Filepath;//ファイルパス

            // フラグのクリアー。
            ref_IsTooLong_Path = false;

            //
            // 人間がCSVファイルに記述しているファイル・パス。
            //
            // 「絶対パス」「相対パス」のどちらでも指定されます。
            //
            string filepath_Source = humaninput.Trim();

            if ("" == filepath_Source)
            {
                // 未設定の場合。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                goto gt_EndMethod;
            }

            // 「絶対パス」か、「相対パス」かを判断します。
            bool isRooted_Path = Utility_Configurationtree_Filepath.IsRooted_Path(
                filepath_Source,
                log_Reports
                );

            if (!log_Reports.Successful)
            {
                // 既エラー。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                goto gt_EndMethod;
            }

            if (!isRooted_Path)
            {
                // 相対パスの場合

                // 「相対パス」に「ベース・ディレクトリー文字列」を連結して、「絶対パス」に変換します。

                if ("" != directory_Base)
                {
                    // 相対パスの相対元となるディレクトリーが設定されていれば。

                    if (!directory_Base.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    {
                        filepath_Source = directory_Base + Path.DirectorySeparatorChar + filepath_Source;
                    }
                    else
                    {
                        filepath_Source = directory_Base + filepath_Source;
                    }
                }
                else
                {
                    // 起動「.exe」のあったパスを、相対の元となるディレクトリーとします。

                    if (!directory_Base.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    {
                        filepath_Source = Application.StartupPath + Path.DirectorySeparatorChar + filepath_Source;
                    }
                    else
                    {
                        filepath_Source = Application.StartupPath + filepath_Source;
                    }
                }
            }

            // ここで、パスは 絶対パスに変換されています。

            try
            {
                // カレントディレクトリは使わない。

                // 絶対パスの場合、GetFullPathを通す必要はないが、
                // ファイルパスに使えない文字列を判定するために、
                // 例外を返すメソッドを使っています。
                result_Filepath = System.IO.Path.GetFullPath(filepath_Source);
            }
            catch (ArgumentException e)
            {
                // 指定のファイルパスに「*」など、ファイルパスとして使えない文字列が含まれていた場合など。

                result_Filepath = "";//ファイルパスとしては使えない文字列。

                err_Excp = e;
                goto gt_Error_ArgumentException;
            }
            catch (PathTooLongException e)
            {
                // ディレクトリーの文字数が、制限数を超えた場合などのエラー。

                result_Filepath = "";//ファイルパスとしては使えない文字列。

                if (isSafe_TooLong_Path)
                {
                    // 正常処理扱いとします。
                }
                else
                {
                    // 異常扱いとします。

                    err_Excp = e;
                    goto gt_Error_PathTooLongException;
                }


                ref_IsTooLong_Path = true;
            }
            catch (NotSupportedException e)
            {
                //パスのフォーマットが間違っているなどのエラー。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                err_Excp        = e;
                goto gt_Error_NotSupportedException;
            }
            catch (Exception e)
            {
                // それ以外のエラー。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                err_Excp        = e;
                goto gt_Error_Exception;
            }

            goto gt_EndMethod;
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_ArgumentException:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー107!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("使えないファイルパスです。[");
                s.Append(filepath_Source);
                s.Append("] :");

                s.Append(err_Excp.Message);
                cur_Conf.ToText_Locationbreadcrumbs(s);

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_PathTooLongException:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー108!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("エラー 入力パス=[" + filepath_Source + "]:(" + err_Excp.GetType().Name + ") ");

                s.Append(err_Excp.Message);
                cur_Conf.ToText_Locationbreadcrumbs(s);

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_NotSupportedException:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー109!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("ファイルパスが間違っているかもしれません。");
                s.Newline();
                s.AppendI(1, "入力パス=[" + filepath_Source + "]");
                s.Newline();

                // ヒント
                s.Append(r.Message_SException(err_Excp));
                cur_Conf.ToText_Locationbreadcrumbs(s);

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_Exception:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー109!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("エラー 入力パス=[" + filepath_Source + "]");
                s.Newline();

                // ヒント
                s.Append(r.Message_SException(err_Excp));
                cur_Conf.ToText_Locationbreadcrumbs(s);

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result_Filepath);
        }
示例#3
0
        //────────────────────────────────────────
        #endregion



        #region アクション
        //────────────────────────────────────────

        public string ToCsvText(
            Table_Humaninput xTable,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Table.Name_Library, this, "ToCsvText", log_Reports);

            Log_TextIndented result = new Log_TextIndentedImpl();

            RecordFielddef error_RecordFielddef;
            Exception      err_Excep;
            int            error_IndexColumn;
            Fielddef       error_Fielddef;
            object         error_Item;

            if (null == xTable)
            {
                // エラー
                goto gt_Error_NullTable;
            }

            CsvLineParserImpl csvParser = new CsvLineParserImpl();

            // フィールド名をカンマ区切りで出力します。最後にEOLを付加します。

            // フィールド定義部
            if (xTable.RecordFielddef.Count < 1)
            {
                //エラー。
                error_RecordFielddef = xTable.RecordFielddef;
                goto gt_Error_FieldZero;
            }


            // フィールド定義部:名前
            xTable.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak, Log_Reports log_Reports2)
            {
                if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper))
                {
                    // 出力しないフィールドの場合、無視します。
                }
                else
                {
                    result.Append(CsvLineParserImpl.EscapeCell(fielddefinition.Name_Humaninput));
                    result.Append(",");
                }
            }, log_Reports);
            result.Append(
                ToCsv_Table_RowColRegularImpl_.S_EOL //ToCsv_Table_Humaninput_RowColRegularImpl.S_END
                );
            result.Append(Environment.NewLine);      //改行

            // フィールド定義部:型
            xTable.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak, Log_Reports log_Reports2)
            {
                if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper))
                {
                    // 出力しないフィールドの場合、無視します。
                }
                else
                {
                    switch (fielddefinition.Type_Field)
                    {
                    case EnumTypeFielddef.String:
                        {
                            result.Append(FielddefImpl.S_STRING);
                        }
                        break;

                    case EnumTypeFielddef.Int:
                        {
                            result.Append(FielddefImpl.S_INT);
                        }
                        break;

                    case EnumTypeFielddef.Bool:
                        {
                            result.Append(FielddefImpl.S_BOOL);
                        }
                        break;

                    default:
                        {
                            // TODO エラー対応。

                            // 未定義の型があった場合、そのまま出力します。
                            // C#のメッセージになるかと思います。
                            result.Append(fielddefinition.ToString_Type());
                        }
                        break;
                    }

                    result.Append(",");
                }
            }, log_Reports);
            result.Append(
                ToCsv_Table_RowColRegularImpl_.S_EOL
                //ToCsv_Table_Humaninput_RowColRegularImpl.S_END
                );
            result.Append(Environment.NewLine);//改行

            // フィールド定義部:コメント
            xTable.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak, Log_Reports log_Reports2)
            {
                if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper))
                {
                    // 出力しないフィールドの場合、無視します。
                }
                else
                {
                    result.Append(CsvLineParserImpl.EscapeCell(fielddefinition.Comment));
                    result.Append(",");
                }
            }, log_Reports);
            result.Append(
                ToCsv_Table_RowColRegularImpl_.S_EOL
                //ToCsv_Table_Humaninput_RowColRegularImpl.S_END
                );
            result.Append(Environment.NewLine);//改行

            // 0行目から数えて3行目以降はデータ・テーブル部。

            // データ・テーブル部
            DataTable dataTable = xTable.DataTable;

            // 各行について
            for (int nRowIndex = 0; nRowIndex < dataTable.Rows.Count; nRowIndex++)
            {
                DataRow dataRow = dataTable.Rows[nRowIndex];

                //
                // 各フィールドについて
                //
                object[] itemArray = dataRow.ItemArray;// ItemArrayは1回の呼び出しが重い。
                for (int indexColumn = 0; indexColumn < itemArray.Length; indexColumn++)
                {
                    // TODO:範囲 リストサイズが0の時がある←プログラムミス?
                    Fielddef fielddefinition;
                    try
                    {
                        fielddefinition = xTable.RecordFielddef.ValueAt(indexColumn);
                    }
                    catch (Exception e)
                    {
                        // エラー。
                        err_Excep            = e;
                        error_RecordFielddef = xTable.RecordFielddef;
                        error_IndexColumn    = indexColumn;
                        goto gt_Error_OutOfIndex;
                    }

                    if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper))
                    {
                        // 出力しないフィールドの場合、無視します。
                    }
                    else
                    {
                        string value_Cell;
                        object item = itemArray[indexColumn];

                        if (item is Cell)
                        {
                            value_Cell = ((Cell)item).Text;
                        }
                        else if (item is string)
                        {
                            //フィールド定義部など。
                            value_Cell = (string)item;
                        }
                        else if (item is DBNull)
                        {
                            //空欄。
                            value_Cell = "";
                        }
                        else
                        {
                            // エラー
                            error_Item     = item;
                            error_Fielddef = fielddefinition;
                            goto gt_Error_UndefinedFieldType;
                        }

                        result.Append(CsvLineParserImpl.EscapeCell(value_Cell));
                        result.Append(this.charSeparator);
                    }
                }
                result.Append(
                    ToCsv_Table_RowColRegularImpl_.S_EOL
                    //ToCsv_Table_Humaninput_RowColRegularImpl.S_END
                    );
                result.Append(Environment.NewLine);//改行
            }
            result.Append(ToCsv_Table_RowColRegularImpl_.S_EOF);
            // 最後に一応、改行を付けておきます。
            result.Append(Environment.NewLine);//改行

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_FieldZero:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー854!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();

                s.Append("(プログラム内部エラー)テーブルの列定義が0件です。 error_RecordFielddef.Count[");
                s.Append(error_RecordFielddef.Count);
                s.Append("] テーブル名=[");
                s.Append(xTable.Name);
                s.Append("]");
                s.Newline();

                // ヒント

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_OutOfIndex:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー853!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();

                s.Append("(プログラム内部エラー)err_NColIndex=[");
                s.Append(error_IndexColumn);
                s.Append("] error_RecordFielddef.Count[");
                s.Append(error_RecordFielddef.Count);
                s.Append("]");
                s.Newline();

                // ヒント
                s.Append(r.Message_SException(err_Excep));

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_UndefinedFieldType:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー855!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();

                s.Append("(プログラム内部エラー)CSVを出力しようとしたとき、未定義のフィールド型=[");
                s.Append(error_Fielddef.ToString_Type());
                s.Append("]がありました。");
                s.Newline();

                s.Append("型名=[");
                s.Append(error_Item.GetType().Name);
                s.Append("]");
                s.Newline();

                s.Append("型は[");
                s.Append(typeof(StringCellImpl));
                s.Append("],[");
                s.Append(typeof(IntCellImpl));
                s.Append("],[");
                s.Append(typeof(BoolCellImpl));
                s.Append("]が使えます。");
                s.Newline();

                // ヒント

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_NullTable:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー852!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();

                s.Append("(プログラム内部エラー)tableがヌルでした。");
                s.Newline();

                // ヒント

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result.ToString());
        }
示例#4
0
        //────────────────────────────────────────

        /// <summary>
        /// 『ツール設定ファイル』へ書き出します。
        /// </summary>
        /// <param name="toolConfigXmlFileAbsPath"></param>
        /// <param name="applicationName"></param>
        /// <param name="inputs"></param>
        /// <param name="runningHintName"></param>
        public void Write(
            string sFpatha_Config_Tool,
            string sName_Application,
            Dictionary_AatoolxmlEditor dic_AatoolxmlEditor,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_MiddleImpl.Name_Library, this, "Write", log_Reports);

            XmlDocument xDoc = new XmlDocument();

            // UTF-8 エンコーディングで書くものとします。
            XmlProcessingInstruction xPi = xDoc.CreateProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");

            xDoc.AppendChild(xPi);

            // 説明文の記述
            {
                StringBuilder sbText1 = new StringBuilder();
                sbText1.Append("このファイルは、UTF-8(BOM無し) エンコーディングで記述してください。");

                xDoc.AppendChild(xDoc.CreateComment(sbText1.ToString()));
            }


            Exception err_Excp;

            try
            {
                // ルート要素を作成
                System.Xml.XmlElement xRoot = xDoc.CreateElement(NamesNode.S_CODEFILE_TOOL);

                //
                // これは書出しなので、スクリプトファイルのバージョンチェックを省略。
                //

                xRoot.SetAttribute("application", sName_Application);
                xDoc.AppendChild(xRoot);

                // 説明文の記述
                {
                    StringBuilder sb1 = new StringBuilder();
                    sb1.Append("このファイルは、恐らく『");
                    sb1.Append(sName_Application);
                    sb1.Append("』によって読書きされるかと思います。");

                    xRoot.AppendChild(xDoc.CreateComment(sb1.ToString()));
                }

                // エディター要素:
                foreach (MemoryAatoolxml_Editor aatool_Editor in dic_AatoolxmlEditor.Dictionary_Item.Values)
                {
                    XmlElement xEditor = xDoc.CreateElement(NamesNode.S_EDITOR);

                    // input要素:
                    aatool_Editor.Dictionary_Fsetvar_Configurationtree.List_Child.ForEach(delegate(Configurationtree_Node s_Fsetvar, ref bool bBreak)
                    {
                        XmlElement x_Input = xDoc.CreateElement(NamesNode.S_F_SET_VAR);

                        //name-var属性
                        string sNamevar;
                        s_Fsetvar.Dictionary_Attribute.TryGetValue(PmNames.S_NAME_VAR, out sNamevar, true, log_Reports);

                        //folder属性
                        string sFolder;
                        s_Fsetvar.Dictionary_Attribute.TryGetValue(PmNames.S_FOLDER, out sFolder, true, log_Reports);

                        //value属性
                        string sValue;
                        s_Fsetvar.Dictionary_Attribute.TryGetValue(PmNames.S_VALUE, out sValue, true, log_Reports);

                        //description属性
                        string sDescription;
                        s_Fsetvar.Dictionary_Attribute.TryGetValue(PmNames.S_DESCRIPTION, out sDescription, true, log_Reports);

                        x_Input.SetAttribute(PmNames.S_NAME.Name_Attribute, sNamevar);
                        x_Input.SetAttribute(PmNames.S_FOLDER.Name_Attribute, sFolder);
                        x_Input.SetAttribute(PmNames.S_VALUE.Name_Attribute, sValue);
                        x_Input.SetAttribute(PmNames.S_DESCRIPTION.Name_Attribute, sDescription);

                        xEditor.AppendChild(x_Input);
                    });

                    xRoot.AppendChild(xEditor);
                }



                // .xmlファイルの中身全文を保存。
                xDoc.Save(sFpatha_Config_Tool);
            }
            catch (Exception ex)
            {
                // エラー
                err_Excp = ex;
                goto gt_Error_Exception;
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_Exception:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー351!", log_Method);

                StringBuilder s = new StringBuilder();
                s.Append("『ツール設定ファイル』への書き出しに失敗しました。");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                // ヒント
                s.Append(r.Message_SException(err_Excp));

                r.Message = r.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return;
        }
示例#5
0
        //────────────────────────────────────────
        #endregion



        #region アクション
        //────────────────────────────────────────

        /// <summary>
        /// Rfrファイル読取。
        ///
        /// 呼び出し元で、memoryApplicationに Stg をセットする。
        /// </summary>
        public Configurationtree_Node XmlToConfigurationtree(
            string sFpatha,//絶対ファイルパス
            MemoryApplication memoryApplication,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);

            log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "XmlToConfigurationtree", log_Reports);
            //
            //

            // リローディング設定。
            Configurationtree_Node sTg_Cnf = new Configurationtree_NodeImpl(NamesNode.S_CODEFILE_TOGETHERS, new Configurationtree_NodeImpl(sFpatha, null));

            System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();

            XmlElement err_XTop;
            Exception  err_Excp;

            try
            {
                xDoc.Load(sFpatha);


                // ルート要素を取得
                System.Xml.XmlElement xRoot = xDoc.DocumentElement;

                // スクリプトファイルのバージョンチェック。(関数登録ファイル)
                ValuesAttr.Test_Codefileversion(
                    xRoot.GetAttribute(PmNames.S_CODEFILE_VERSION.Name_Attribute),
                    log_Reports,
                    new Configurationtree_NodeImpl(sFpatha, null),
                    NamesNode.S_CODEFILE_TOGETHERS
                    );

                if (log_Reports.Successful)
                {
                    XmlNodeList xTopNL = xRoot.ChildNodes;

                    foreach (XmlNode xTopNode in xTopNL)
                    {
                        if (XmlNodeType.Element == xTopNode.NodeType)
                        {
                            XmlElement xTop = (XmlElement)xTopNode;

                            if (NamesNode.S_TOGETHER == xTop.Name)
                            {
                                XmlToConfigurationtree_C15_Elm to = XmlToConfigurationtree_Collection.GetTranslatorByNodeName(NamesNode.S_TOGETHER, log_Reports);
                                to.XmlToConfigurationtree(
                                    xTop,
                                    sTg_Cnf,
                                    memoryApplication,
                                    log_Reports
                                    );
                            }
                            else
                            {
                                err_XTop = xTop;
                                goto gt_Error_NotSupportedChild;
                            }
                        }
                    }
                }
            }
            catch (System.IO.IOException ex)
            {
                err_Excp = ex;
                goto gt_Error_IOException;
            }
            catch (Exception ex)
            {
                err_Excp = ex;
                goto gt_Error_Exception;
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_NotSupportedChild:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー387!", log_Method);

                StringBuilder t = new StringBuilder();
                t.Append("トゥゲザー登録ファイルに、<" + NamesNode.S_TOGETHER + ">要素以外の要素[");
                t.Append(err_XTop.Name);
                t.Append("]が含まれていました。");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);

                // ヒント
                t.Append(r.Message_Configuration(sTg_Cnf));

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_IOException:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー388!", log_Method);

                StringBuilder t = new StringBuilder();

                t.Append("ファイルが見つかりません。");
                t.Append(Environment.NewLine);
                t.Append("absoluteFilePath=[");
                t.Append(sFpatha);
                t.Append("]");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);

                // ヒント
                t.Append(r.Message_Configuration(sTg_Cnf));
                t.Append(r.Message_SException(err_Excp));

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_Exception:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー344!", log_Method);

                StringBuilder t = new StringBuilder();

                t.Append("読み込むファイルを間違えているかも?");
                t.Append(Environment.NewLine);
                t.Append("トゥゲザー登録ファイル(絶対パス)=[" + sFpatha + "]");
                t.Append(Environment.NewLine);
                t.Append("ex.Message=[" + err_Excp.Message + "]");
                t.Append(Environment.NewLine);
                t.Append("ex.GetType().Name=[" + err_Excp.GetType().Name + "]");

                // ヒント
                t.Append(r.Message_Configuration(sTg_Cnf));
                t.Append(r.Message_SException(err_Excp));

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(sTg_Cnf);
        }
示例#6
0
        //────────────────────────────────────────
        #endregion



        #region アクション
        //────────────────────────────────────────

        public void Read(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl();

            log_Method.BeginMethod(Info_Actorslist.Name_Library, this, "button1_Click", log_Reports);

            Exception error_Exception;
            string    error_Attribute;
            string    error_Value;

            string filepathConfig = Path.Combine(Application.StartupPath, "Config.xml");

            {
                XmlDocument doc = new XmlDocument();

                try
                {
                    doc.Load(filepathConfig);

                    XmlElement root = doc.DocumentElement;

                    foreach (XmlNode child in root.ChildNodes)
                    {
                        if (child is XmlElement)
                        {
                            XmlElement elm = (XmlElement)child;

                            if ("input" == elm.Name)
                            {
                                if ("FolderProject" == elm.GetAttribute("name"))
                                {
                                    string value = elm.GetAttribute("value");
                                    this.FolderpathProject = value;

                                    if (!Directory.Exists(value))
                                    {
                                        error_Attribute = "FolderProject";
                                        error_Value     = value;
                                        goto gt_Error_Folder1;
                                    }
                                }
                                else if ("FileExportLualist" == elm.GetAttribute("name"))
                                {
                                    string value = elm.GetAttribute("value");
                                    this.FilepathExportLualist = value;

                                    //if (!Directory.Exists(value))
                                    //{
                                    //    error_Attribute = "FileExportLualist";
                                    //    error_Value = value;
                                    //    goto gt_Error_File1;
                                    //}
                                }
                                else if ("FileExportFunctionlist" == elm.GetAttribute("name"))
                                {
                                    string value = elm.GetAttribute("value");
                                    this.FilepathExportFunctionlist = value;

                                    //if (!Directory.Exists(value))
                                    //{
                                    //    error_Attribute = "FilepathExportFunctionlist";
                                    //    error_Value = value;
                                    //    goto gt_Error_File1;
                                    //}
                                }
                            }
                            else
                            {
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    error_Exception = ex;
                    goto gt_Error_Config;
                }
            }

            System.Console.WriteLine("filepathExportLualist=[" + filepathExportLualist + "]");


            goto gt_EndMethod;
            #region 異常系
            //────────────────────────────────────────
gt_Error_Config:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー13002!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("Config.xmlにエラー?");
                s.Newline();

                s.Append(r.Message_SException(error_Exception));

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_Folder1:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー13005!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("存在するフォルダーを指定してください。");
                s.Append(Environment.NewLine);
                s.Append("  " + error_Attribute + "=[");
                s.Append(this.FolderpathProject);
                s.Append("]");

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            //gt_Error_File1:
            //    if (log_Reports.CanCreateReport)
            //    {
            //        Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
            //        r.SetTitle("▲エラー13006!", log_Method);

            //        Log_TextIndented s = new Log_TextIndentedImpl();
            //        s.Append("存在するファイルを指定してください。");
            //        s.Append(Environment.NewLine);
            //        s.Append("  " + error_Attribute + "=[");
            //        s.Append(this.FolderpathProject);
            //        s.Append("]");

            //        r.Message = s.ToString();
            //        log_Reports.EndCreateReport();
            //    }
            //    goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
        }
示例#7
0
        //────────────────────────────────────────
        #endregion



        #region アクション
        //────────────────────────────────────────

        /// <summary>
        /// 実行します。
        /// </summary>
        /// <param name="filePathList">保存するファイルの相対パスの一覧。「起動アプリケーション・ファイル(.exe)からの相対パス」として設定してあること。</param>
        /// <param name="oDateBackupBaseDirectory"></param>
        /// <param name="d_Thread"></param>
        public void Perform(
            Log_Reports log_Reports
            )
        {
            Log_Method pg_Method = new Log_MethodImpl();

            pg_Method.BeginMethod(Info_Operating.Name_Library, this, "Perform", log_Reports);

            //
            //
            //
            //

            Exception err_Excp;
            string    err_SFpatha_Source;
            string    err_SFpatha_Dst;

            if (null == this.Expression_Filepath_Backuphome)
            {
                // エラー
                goto gt_Error_BkFolder;//todo:バックアップを無視する。
            }

            //
            // バックアップ・ディレクトリーの絶対パス
            //
            // 例:「editor-backup」
            //
            string sFpatha_BkHome = this.Expression_Filepath_Backuphome.Execute4_OnExpressionString(
                EnumHitcount.Unconstraint,
                log_Reports
                );

            if (!log_Reports.Successful)
            {
                // 既エラー。
                goto gt_EndMethod;
            }

            //.WriteLine(this.GetType().Name + "#Perform: バックアップディレクトリーの絶対パス=[" + backupAbsFilePath + "]" );


            // 日付フォルダー名(FOlder Name)
            string sDateFon = DatebackupImpl.CreateDateFolderName(this.Name_Sub);


            Configurationtree_Node s_ParentNode = new Configurationtree_NodeImpl("!ハードコーディング_DataBackup#Perform", null);
            // バックアップ・フォルダー下の日付ファイル名


            // 日付フォルダーパス(「…略…\20091201」など)
            string sFopatha_date;
            {
                Expression_Node_Filepath ec_Dir;
                {
                    Configurationtree_NodeFilepath cf_dir = new Configurationtree_NodeFilepathImpl("ファイルパス出典未指定L03_3", s_ParentNode);
                    cf_dir.InitPath(sFpatha_BkHome, sDateFon,
                                    log_Reports
                                    );
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }

                    ec_Dir = new Expression_Node_FilepathImpl(cf_dir);
                }

                if (!log_Reports.Successful)// 異常時はスキップ
                {
                    goto gt_EndMethod;
                }

                sFopatha_date = ec_Dir.Execute4_OnExpressionString(
                    EnumHitcount.Unconstraint,
                    log_Reports
                    );
                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    goto gt_EndMethod;
                }
            }

            // temp日付フォルダーパス(「…略…\temp20091201」など)
            string sFopatha_dateTemp;

            {
                Expression_Node_Filepath ec_Dir;
                {
                    Configurationtree_NodeFilepath s_dir = new Configurationtree_NodeFilepathImpl("ファイルパス出典未指定L03_4", s_ParentNode);
                    s_dir.InitPath(sFpatha_BkHome, "temp" + sDateFon,
                                   log_Reports
                                   );
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }

                    ec_Dir = new Expression_Node_FilepathImpl(s_dir);
                }

                if (!log_Reports.Successful)// 異常時はスキップ
                {
                    goto gt_EndMethod;
                }

                sFopatha_dateTemp = ec_Dir.Execute4_OnExpressionString(
                    EnumHitcount.Unconstraint,
                    log_Reports
                    );
                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    goto gt_EndMethod;
                }
            }
            //.WriteLine(this.GetType().Name + "#Perform: absDateDirTemp=[" + absDateDirTemp + "]");

            if (!log_Reports.Successful)// 異常時はスキップ
            {
                goto gt_EndMethod;
            }


            // 今日の日付のフォルダーの有無を確認します。
            if (Directory.Exists(sFopatha_date))
            {
                // ある場合
                // バックアップは取りません。

                // 注意書きを出力してみる。
                //.WriteLine(this.GetType().Name + "#Perform: バックアップを取りません。バックアップ・フォルダーに、既に今日の日付フォルダーがあるので。[" + absDateDir + "]");

                // スキップ
                goto gt_EndMethod;
            }

            //
            // まず、今日の日付のテンポラリーファイル(「temp20091201」など)が存在すれば、削除します。
            //
            if (Directory.Exists(sFopatha_dateTemp))
            {
                // ある場合

                // 該当する「tempXXXXXXXX」フォルダーを削除します。
                // フォルダーの中身も破棄します。
                Directory.Delete(sFopatha_dateTemp, true);
            }

            //
            // 今日の日付のテンポラリー・ディレクトリーを作成します。
            //
            //
            Directory.CreateDirectory(sFopatha_dateTemp);
            // 作っておかないと、自作のクラスの中で「存在しないファイルパス・エラー」という事前チェックが誤発動してしまいます。


            // バックアップを取ります。
            foreach (Expression_Node_Filepath ec_Fpath_WrittenPlace in list_Expression_Filepath_Request)
            {
                //.WriteLine(this.GetType().Name + "#Perform: バックアップを取りたいファイルのパス sourceFilePath.HumanInputText=[" + oWrittenPlaceFilePath.HumanInputText + "]");

                // 保存先
                Expression_Node_Filepath ec_Fpath_Dst;
                {
                    Configurationtree_NodeFilepath cf_fpath_Destination = new Configurationtree_NodeFilepathImpl("ファイルパス出典未指定L03_5", s_ParentNode);
                    cf_fpath_Destination.InitPath(
                        sFopatha_dateTemp,
                        ec_Fpath_WrittenPlace.Humaninput,
                        log_Reports
                        );
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }

                    ec_Fpath_Dst = new Expression_Node_FilepathImpl(cf_fpath_Destination);
                }

                if (!log_Reports.Successful)// 異常時はスキップ
                {
                    goto gt_EndMethod;
                }

                string sFpatha_Source = ec_Fpath_WrittenPlace.Execute4_OnExpressionString(
                    EnumHitcount.Unconstraint,
                    log_Reports
                    );
                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    goto gt_EndMethod;
                }

                // 人間オペレーターが記述しているファイルパス。
                // 「相対パス」か「絶対パス」のどちらか。
                string sFpath_HumanInput = ec_Fpath_Dst.Humaninput;


                //
                // 絶対パスで指定されたファイルを、バックアップに保存する方法
                //
                // 例: 例えば、「C:\」を「C@\」に置換し、日付フォルダーの下に保存します。
                //
                // 注意:「C:」より長い文字列と置換すると、文字列の長さ制限に引っかかることがあります。
                //

                // 「絶対パス」か、「相対パス」かを判断します。
                bool bPathRooted = Utility_Configurationtree_Filepath.IsRooted_Path(sFpath_HumanInput,
                                                                                    log_Reports
                                                                                    );
                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    goto gt_EndMethod;
                }


                if (!log_Reports.Successful)// 異常時はスキップ
                {
                    goto gt_EndMethod;
                }

                // 絶対パスへの対応。
                if (bPathRooted)
                {
                    // 絶対パスであれば、「C:\」といった文字列が先頭に来ることが予想されます。
                    // 文字「:」が 2文字目 だけに存在することを想定して、
                    // 「:」を「@」に置換します。
                    //
                    // 「絶対パスのようなもの」を、バックアップ日付フォルダーの下に作る想定です。
                    // ファイル名が長くなりすぎるので、この後、ファイル名を縮める処理になることが多い。
                    //
                    //.WriteLine(this.GetType().Name + "#Perform: バックアップを取りたいファイルのパス名 humanInputFilePathStr=[" + humanInputFilePathStr + "]");
                    string sNewRelHPath3 = sFpath_HumanInput.Replace(":", "@");
                    //.WriteLine(this.GetType().Name + "#Perform: コロン記号を置換した後のファイルパス名 newRelHPathStr3=[" + newRelHPathStr3 + "]");

                    // 絶対パスでバックアップ対象ファイルが指定されていた場合

                    //
                    // 「C:\banana」は、「C@\banana」に置換
                    //

                    // 設定のし直し。
                    // 出力ファイルの絶対パスが長すぎると真。
                    bool isTooLong_Path = Utility_Configurationtree_Filepath.IsTooLong_Path(
                        sNewRelHPath3,
                        log_Reports,
                        s_ParentNode
                        );
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }

                    if (!log_Reports.Successful)// 異常時はスキップ
                    {
                        goto gt_EndMethod;
                    }

                    if (isTooLong_Path)
                    {
                        // 強引に短縮。
                        sNewRelHPath3 = DatebackupImpl.ReplaceToJammingFilePath(
                            sNewRelHPath3,
                            this.NSubstitutionFileNumber,
                            this.GetType().Name + "#Perform:"
                            );
                        this.NSubstitutionFileNumber++;
                        //.WriteLine(this.GetType().Name + "#Perform: 短くした保存先ファイルパス名 newRelHPathStr3=[" + newRelHPathStr3 + "]");

                        // それでも、出力ファイルの絶対パスが長すぎると、後ろのプログラムで例外を投げます。
                    }

                    // (2010-02-24 ※修正)
                    // 保存先ファイルパスをセット。
                    ec_Fpath_Dst.SetHumaninput(
                        sNewRelHPath3,
                        log_Reports
                        );
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }
                }
                // 絶対パスへの対応終了

                if (!log_Reports.Successful)// 異常時はスキップ
                {
                    goto gt_EndMethod;
                }

                // もう一回、絶対パスの取得し直し
                string sFpatha_Dst = ec_Fpath_Dst.Execute4_OnExpressionString(
                    EnumHitcount.Unconstraint,
                    log_Reports
                    );
                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    goto gt_EndMethod;
                }


                // ファイルのコピーで作成します。
                //.WriteLine(this.GetType().Name + "#Perform: [" + sourceAbsFilePath + "]を");
                //.WriteLine(this.GetType().Name + "#Perform: [" + absDstPathStr + "]にコピーします。");
                try
                {
                    string sDestinationParent = Path.GetDirectoryName(sFpatha_Dst);
                    if (!Directory.Exists(sDestinationParent))
                    {
                        // 指定のファイルの、ディレクトリーが存在しなかった場合。

                        // ディレクトリーを作成します。
                        Directory.CreateDirectory(sDestinationParent);
                    }
                }
                catch (Exception e)
                {
                    // エラー
                    err_Excp = e;
                    goto gt_Error_MissIo;
                }

                try
                {
                    // todo: 同名のファイルがあれば、「aaa(1).txt」「aaa(2).txt」といった風に番号を付けていきたい。

                    // ファイルのコピー
                    System.IO.File.Copy(sFpatha_Source, sFpatha_Dst, false);
                }
                catch (Exception e)
                {
                    // エラー
                    err_Excp           = e;
                    err_SFpatha_Source = sFpatha_Source;
                    err_SFpatha_Dst    = sFpatha_Dst;
                    goto gt_Error_MissCopy;
                }
            }

            if (!log_Reports.Successful)
            {
                // 異常時はスキップ
                goto gt_EndMethod;
            }

            try
            {
                // テンポラリーフォルダーを、正規の名前にリネームします。
                Directory.Move(sFopatha_dateTemp, sFopatha_date);
            }
            catch (Exception e)
            {
                // エラー
                err_Excp = e;
                goto gt_Error_MissMove;
            }

            // 「バックアップ日付フォルダー」が11個以上あるとき、
            // 日付が新しいものを(指定)個残して 他の日付フォルダーを破棄します。

            this.DeleteOldBackup(
                sFpatha_BkHome,
                sName_Sub,
                log_Reports
                );
            // 異常時は、「temp20091202」といった、処理を中断したゴミ・ファイルが残ることがあります。


            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_BkFolder:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー508!", pg_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("バックアップ・フォルダーが指定されていません。");

                // ヒント

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_MissIo:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー65507!", pg_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("エラー:");
                //
                // ヒント
                s.Append(r.Message_SException(err_Excp));
                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_MissCopy:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー65506!", pg_Method);

                StringBuilder t = new StringBuilder();
                t.Append("ファイルのコピーに失敗。");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);

                t.Append("[");
                t.Append(err_SFpatha_Source);
                t.Append("]");
                t.Append("を");
                t.Append(Environment.NewLine);

                t.Append("[");
                t.Append(err_SFpatha_Dst);
                t.Append("]");
                t.Append("へコピーしようとしたとき。");
                t.Append(Environment.NewLine);

                //
                // ヒント
                t.Append(r.Message_SException(err_Excp));

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_MissMove:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー65508!", pg_Method);

                Log_TextIndentedImpl t = new Log_TextIndentedImpl();
                t.Append("ファイルのリネーム(Move)に失敗。");
                //
                // ヒント
                t.Append(r.Message_SException(err_Excp));
                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            pg_Method.EndMethod(log_Reports);
        }
示例#8
0
        //────────────────────────────────────────

        /// <summary>
        /// ファイル読み込み。
        /// </summary>
        /// <param name="ec_Fpath_Aatoolxml"></param>
        public void LoadFile(
            Expression_Node_Filepath ec_Fpath_Aatoolxml,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);

            log_Method.BeginMethod(Info_MiddleImpl.Name_Library, this, "LoadFile", log_Reports);
            //

            Exception err_Excp;


            string sFpatha_Aatoolxml = "";

            if (log_Reports.Successful)
            {
                //
                // 『ツール設定』をクリアー。
                //
                this.Clear(this.Owner_MemoryApplication);

                sFpatha_Aatoolxml = ec_Fpath_Aatoolxml.Execute4_OnExpressionString(
                    EnumHitcount.Unconstraint,
                    log_Reports
                    );//絶対ファイルパス
            }

            if (log_Reports.Successful)
            {
                XmlDocument xDoc = new XmlDocument();

                try
                {
                    // 正常時

                    xDoc.Load(sFpatha_Aatoolxml);

                    // ルート要素を取得
                    XmlElement xRoot = xDoc.DocumentElement;

                    // スクリプトファイルのバージョンチェック。(バリデーター登録ファイル)
                    ValuesAttr.Test_Codefileversion(
                        xRoot.GetAttribute(PmNames.S_CODEFILE_VERSION.Name_Attribute),
                        log_Reports,
                        new Configurationtree_NodeImpl(sFpatha_Aatoolxml, null),
                        NamesNode.S_CODEFILE_TOOL
                        );


                    if (log_Reports.Successful)
                    {
                        // デフォルト・エディター名
                        this.Name_DefaultEditor = xRoot.GetAttribute(PmNames.S_DEFAULT_EDITOR.Name_Attribute);

                        // エディター要素を列挙
                        System.Xml.XmlNodeList xNl_Editor = xRoot.GetElementsByTagName(NamesNode.S_EDITOR);

                        foreach (XmlNode x_EditorNode in xNl_Editor)
                        {
                            if (XmlNodeType.Element == x_EditorNode.NodeType)
                            {
                                //
                                // エディター要素
                                //
                                MemoryAatoolxml_Editor aatool_Editor = new MemoryAatoolxml_EditorImpl(this.cur_Configuration);

                                //
                                // エディター要素
                                //
                                XmlElement xEditor = (XmlElement)x_EditorNode;

                                // ツール設定ファイルに記載されている、エディター名
                                try
                                {
                                    aatool_Editor.Name = xEditor.GetAttribute(PmNames.S_NAME.Name_Attribute);

                                    this.Dictionary_Editor.Dictionary_Item.Add(aatool_Editor.Name, aatool_Editor);
                                }
                                catch (ArgumentException ex)
                                {
                                    err_Excp = ex;
                                    goto gt_Error_DuplicatedEditorName;
                                }


                                // <f-set-var>要素を列挙
                                System.Xml.XmlNodeList xNl_Fsetvar = xEditor.GetElementsByTagName(NamesNode.S_F_SET_VAR);

                                for (int nIndex_Fsetvar = 0; nIndex_Fsetvar < xNl_Fsetvar.Count; nIndex_Fsetvar++)
                                {
                                    XmlNode xNode_Fsetvar = xNl_Fsetvar.Item(nIndex_Fsetvar);

                                    if (XmlNodeType.Element == xNode_Fsetvar.NodeType)
                                    {
                                        //<f-set-var>要素
                                        Configurationtree_Node cf_Fsetvar = new Configurationtree_NodeImpl(NamesNode.S_F_SET_VAR, ec_Fpath_Aatoolxml.Cur_Configuration);

                                        //<f-set-var>要素
                                        XmlElement xFsetvar = (XmlElement)xNode_Fsetvar;

                                        string sNamevar     = xFsetvar.GetAttribute(PmNames.S_NAME_VAR.Name_Attribute);
                                        string sFolder      = xFsetvar.GetAttribute(PmNames.S_FOLDER.Name_Attribute);
                                        string sValue       = xFsetvar.GetAttribute(PmNames.S_VALUE.Name_Attribute);
                                        string sDescription = xFsetvar.GetAttribute(PmNames.S_DESCRIPTION.Name_Attribute);


                                        cf_Fsetvar.Dictionary_Attribute.Set(PmNames.S_NAME_VAR.Name_Pm, sNamevar, log_Reports);
                                        cf_Fsetvar.Dictionary_Attribute.Set(PmNames.S_FOLDER.Name_Pm, sFolder, log_Reports);
                                        cf_Fsetvar.Dictionary_Attribute.Set(PmNames.S_VALUE.Name_Pm, sValue, log_Reports);
                                        cf_Fsetvar.Dictionary_Attribute.Set(PmNames.S_DESCRIPTION.Name_Pm, sDescription, log_Reports);

                                        aatool_Editor.Dictionary_Fsetvar_Configurationtree.List_Child.Add(cf_Fsetvar, log_Reports);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (System.IO.FileNotFoundException ex)
                {
                    err_Excp = ex;
                    goto gt_Error_NothingFile;
                }
                catch (System.Exception ex)
                {
                    err_Excp = ex;
                    goto gt_Error_Exception;
                }
            }

            if (log_Reports.Successful)
            {
                this.cur_Configuration = ec_Fpath_Aatoolxml.Cur_Configuration;
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_DuplicatedEditorName:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー204!", log_Method);

                StringBuilder s = new StringBuilder();
                s.Append("『ツール設定ファイル』(tool config)読み取り中に、何らかのエラーが発生しました。");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                s.Append("もしかして?: <" + NamesNode.S_EDITOR + ">要素の" + PmNames.S_NAME.Name_Attribute + "属性が重複している?");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                // 例外メッセージ
                s.Append(r.Message_SException(err_Excp));

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_NothingFile:
            {
                Builder_TexttemplateP1p tmpl = new Builder_TexttemplateP1pImpl();
                tmpl.SetParameter(1, ValuesAttr.S_FPATHR_AATOOLXML, log_Reports);
                tmpl.SetParameter(2, Log_RecordReportsImpl.ToText_Exception(err_Excp), log_Reports);

                this.Owner_MemoryApplication.CreateErrorReport("Er:1;", tmpl, log_Reports);
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_Exception:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー203!", log_Method);

                StringBuilder s = new StringBuilder();
                s.Append("『ツール設定ファイル』(tool config)読み取り中に、何らかのエラーが発生しました。");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                s.Append("もしかして?: XMLのencoding指定が間違っている?この読取プログラムの期待するエンコードでないかも?");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                //
                // 例外メッセージ
                s.Append(r.Message_SException(err_Excp));

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return;
        }
示例#9
0
        //────────────────────────────────────────

        /// <summary>
        /// X → S。
        /// </summary>
        /// <param name="sFpatha">絶対ファイルパス</param>
        /// <param name="memoryApplication"></param>
        /// <param name="log_Reports"></param>
        public void XmlToConfigurationtree(
            string sFpatha,
            MemoryApplication memoryApplication,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "XmlToConfigurationtree", log_Reports);
            //
            //

            System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
            Exception err_Excp          = null;

            if (System.IO.File.Exists(sFpatha))
            {
                try
                {
                    xDoc.Load(sFpatha);
                }
                catch (System.IO.IOException ex)
                {
                    //
                    // エラー。
                    err_Excp = ex;
                    goto gt_Error_IoException01;
                }
                catch (ArgumentException ex)
                {
                    //
                    // エラー。
                    err_Excp = ex;
                    goto gt_Error_ArgException01;
                }
                catch (Exception ex)
                {
                    //
                    // エラー。
                    err_Excp = ex;
                    goto gt_Error_Exception91;
                }
            }
            else
            {
                // エラー。
                goto gt_Error_NotFoundFile;
            }



            XmlNode err_XTopNode = null;

            if (log_Reports.Successful)
            {
                // new した直後の内容に戻します。
                memoryApplication.MemoryValidators.Configurationtree_Validatorsconfig.Clear(NamesNode.S_CODEFILE_VALIDATORS, new Configurationtree_NodeImpl(sFpatha, null), log_Reports);


                // ルート要素を取得
                System.Xml.XmlElement xRoot = xDoc.DocumentElement;

                // スクリプトファイルのバージョンチェック。(バリデーター登録ファイル)
                ValuesAttr.Test_Codefileversion(
                    xRoot.GetAttribute(PmNames.S_CODEFILE_VERSION.Name_Attribute),
                    log_Reports,
                    new Configurationtree_NodeImpl(sFpatha, null),
                    NamesNode.S_CODEFILE_VALIDATORS
                    );

                //
                //<control>要素を列挙
                //
                XmlNodeList xNl_Top = xRoot.ChildNodes;

                foreach (XmlNode xTopNode in xNl_Top)
                {
                    err_XTopNode = xTopNode;

                    if (XmlNodeType.Element == xTopNode.NodeType)
                    {
                        if (NamesNode.S_CONTROL1 == xTopNode.Name)
                        {
                            XmlElement xTop = (XmlElement)xTopNode;

                            //
                            //
                            //
                            //<control>要素
                            //
                            //
                            //

                            XmlToConfigurationtree_C15_Elm to = XmlToConfigurationtree_Collection.GetTranslatorByNodeName(xTopNode.Name, log_Reports);
                            to.XmlToConfigurationtree(
                                xTop,
                                memoryApplication.MemoryValidators.Configurationtree_Validatorsconfig,
                                memoryApplication,
                                log_Reports
                                );
                        }
                        else
                        {
                            //
                            // エラー。
                            goto gt_Error_UndefinedChild04;
                        }
                    }
                }
            }
            else
            {
                // new した直後の内容に戻します。
                memoryApplication.MemoryValidators.Configurationtree_Validatorsconfig.Clear(NamesNode.S_CODEFILE_VALIDATORS, new Configurationtree_NodeImpl("!ハードコーディング_" + log_Method.Fullname, null), log_Reports);
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_NotFoundFile:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー31!", log_Method);

                StringBuilder s = new StringBuilder();
                s.Append("バリデーション設定ファイル読取時。");
                s.Append(Environment.NewLine);
                s.Append("ファイルが見つかりません。");
                s.Append(Environment.NewLine);
                s.Append("[");
                s.Append(sFpatha);
                s.Append("]");

                // ヒント

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_IoException01:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー34!", log_Method);

                StringBuilder s = new StringBuilder();
                s.Append("バリデーション設定ファイル読取時。");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);
                s.Append("ファイルが見つかりません:" + err_Excp.Message);
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                // ヒント

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_ArgException01:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー397!", log_Method);

                StringBuilder t = new StringBuilder();
                t.Append("バリデーション設定ファイル読取時。");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);
                t.Append("読み込むファイルを間違えているかも?:" + err_Excp.Message);
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);
                t.Append("absoluteFilePath=[");
                t.Append(sFpatha);
                t.Append("]");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);

                // ヒント

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_UndefinedChild04:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー398!", log_Method);

                StringBuilder sb = new StringBuilder();
                sb.Append("バリデーション設定ファイル(Xv)に、<" + NamesNode.S_CONTROL1 + ">要素以外の要素[");
                sb.Append(err_XTopNode.Name);
                sb.Append("]が含まれていました。");
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);

                // ヒント

                r.Message = sb.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_Exception91:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー399!", log_Method);

                StringBuilder t = new StringBuilder();
                t.Append("何らかのエラー。");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);

                // ヒント
                t.Append(r.Message_SException(err_Excp));

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
        }