From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.SourceFactory/BeanCreator.cs |  525 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 525 insertions(+), 0 deletions(-)

diff --git a/HotelPms.SourceFactory/BeanCreator.cs b/HotelPms.SourceFactory/BeanCreator.cs
new file mode 100644
index 0000000..59a8e28
--- /dev/null
+++ b/HotelPms.SourceFactory/BeanCreator.cs
@@ -0,0 +1,525 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.IO;
+using System.Windows.Forms;
+using HotelPms.Share.Windows.Util;
+using HotelPms.Share.Util;
+using HotelPms.SourceFactory.Util;
+using HotelPms.Share.Data;
+using System.Diagnostics;
+
+namespace HotelPms.SourceFactory
+{
+    public partial class BeanCreator : FormBase
+    {
+        private MsSqlNet msSqlNet;
+
+        public BeanCreator()
+        {
+            InitializeComponent();
+        }
+
+        private void BeanCreator_Load(object sender, EventArgs e)
+        {
+            GeneralSub.InitDataGridView(dataGridView1, true);
+            GeneralSub.InitDataGridView(dataGridView2, true);
+            msSqlNet = EnvironmentSetting.Default.CreateDBAccess();
+            dataGridView1.DataSource = msSqlNet.GetTableList();
+            dataGridView2.ReadOnly = false;
+            dataGridView1.ColumnHeadersDefaultCellStyle.SelectionBackColor = SystemColors.Control;
+            dataGridView1.EnableHeadersVisualStyles = false;
+            dataGridView2.ColumnHeadersDefaultCellStyle.SelectionBackColor = SystemColors.Control;
+            dataGridView2.EnableHeadersVisualStyles = false;
+
+
+            foreach (DataGridViewRow row in dataGridView1.Rows)
+            {
+                System.Diagnostics.Debug.WriteLine(row.Cells[0].Value.ToString() + ",");
+            }
+        }
+
+        private void dataGridView1_SelectionChanged(object sender, EventArgs e)
+        {
+            if (dataGridView1.CurrentRow == null) { return; }
+            dataGridView2.DataSource = msSqlNet.GetFieldList(dataGridView1.CurrentRow.Cells[0].Value.ToString());
+            foreach (DataGridViewRow row in dataGridView2.Rows) { row.Cells["colFieldSel"].Value = true; }
+
+            txtTsBeanClassName.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString().Substring(2);
+            txtTsBeanInterfaceName.Text = $"I{dataGridView1.CurrentRow.Cells[0].Value.ToString().Substring(2)}";
+            txtTsAccessClassName.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString().Substring(2) + "Api";
+
+            string baseName = dataGridView1.CurrentRow.Cells[0].Value.ToString().Substring(2);
+            lblBlazorViewModel.Text = $"{baseName}.cs";
+            chkBlazorViewModel.Checked = false;
+
+            lblProtos.Text = $"{baseName.ToLower()}.proto";
+            chkProtos.Checked = false;
+
+            chkStartup.Checked = false;
+
+            lblServices.Text = $"{baseName}Service.cs";
+            chkServices.Checked = false;
+
+            lblClientAccess.Text = $"{baseName}Access.cs";
+            chkClientAccess.Checked = false;
+            lblClientDirectAccess.Text = $"{baseName}Access.cs";
+            chkClientDirectAccess.Checked = false;
+            lblClientMaster.Text = $"{baseName}.cs";
+            chkClientMaster.Checked = false;
+            lblClientTable.Text = $"{baseName}Table.cs";
+            chkClientTable.Checked = false;
+            lblClientUse.Text = $"{baseName}.cs";
+            chkClientUse.Checked = false;
+        }
+
+        public object GetField(string name)
+        {
+            if (name.ToLower() == "".ToLower()) { return name; }
+            else if (name.ToLower() == "".ToLower()) { return name; }
+            else { return string.Empty; }
+        }
+
+        public Dictionary<string, int> GetPrimaryKey()
+        {
+            Dictionary<string, int> dict = new Dictionary<string, int>();
+            dict.Add("", 0);
+            dict.Add("ddd", 1);
+            return dict;
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private string ToProto3Type(string type)
+        {
+            if (type.ToLower() == "int") { return "int32"; }
+            else if (type.ToLower() == "bytestring") { return "bytes"; }
+            else if (type.ToLower() == "long") { return "int64"; }
+            else if (type.ToLower() == "datetime") { return "google.protobuf.Timestamp"; }            
+            else { return type.ToLower(); }
+        }
+
+
+        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
+        {
+
+        }
+
+        private void button2_Click(object sender, EventArgs e)
+        {
+//            /// ****************************** Description *******************************
+//            /// ���V�X�e������
+//            /// �@PMS FrameWork 1.0
+//            /// ���T�v
+//            /// �@SPA��
+//            /// ������
+//            /// �@�}�X�^�f�[�^�̊�b
+//            /// ****************************** Declarations ******************************
+//            export default interface IMasterListRowBase
+//        {
+//            ID: number;
+//    Name: string;
+//}
+
+
+        //����Ȋ���
+        //            import MasterBase from './MasterBase';
+
+        //            export default class Login extends MasterBase
+        //        {
+        //  public GroupID: number = 0;
+        //  public Kana: string = '';
+        //  public Password: string = '';
+        //  public PWCreateDate: Date = new Date();
+        //        public LanguageType: number = 0;
+        //}
+
+
+        DirectoryInfo dir = Directory.CreateDirectory(Application.StartupPath + Path.DirectorySeparatorChar + @"Work");
+
+            //�N���X
+            string[] items = new string[17];
+            items[0] = txtTsBeanClassName.Text;
+            items[1] = CConvert.ToDateString(DateTime.Now);
+            items[2] = txtTsBeanClassName.Text;
+            items[3] = string.Empty;
+
+            //�C���^�[�t�F�[�X
+            string[] accessItems = new string[11];
+            accessItems[0] = txtTsBeanInterfaceName.Text;
+            accessItems[1] = CConvert.ToDateString(DateTime.Now);
+            accessItems[2] = txtTsBeanInterfaceName.Text;
+            accessItems[3] = string.Empty;
+
+            int index = 0;
+            foreach (DataGridViewRow row in dataGridView2.Rows)
+            {
+                if (!CConvert.ToBool(row.Cells["colFieldSel"].Value)) { continue; }
+
+                string type = TypeScriptFactory.ToTsType(row.Cells["Type"].Value.ToString());
+                string name = row.Cells["Field"].Value.ToString();
+                if(name.ToUpper() == "ID" || name.ToUpper() == "NAME") { continue; }
+
+                if(index > 0)
+                {
+                    items[3] += Environment.NewLine;
+                    accessItems[3] += Environment.NewLine;
+                }
+
+                items[3] += $"  public {name}: {type} = {TypeScriptFactory.GetDefValue(row.Cells["Type"].Value.ToString())};";
+                accessItems[3] += $"  {name}: {type};";
+                index++;
+            }
+
+            string fileInfo = EnvironmentSetting.TsBeanFileMode;
+            for (int i = 0; i < items.Length; i++)
+            {
+                fileInfo = fileInfo.Replace("@" + i.ToString() + "@", items[i]);
+            }
+            if (!Directory.Exists(dir.FullName + Path.DirectorySeparatorChar + @"Ts\")) { Directory.CreateDirectory(dir.FullName + Path.DirectorySeparatorChar + @"Ts\"); }
+            File.WriteAllText(dir.FullName + Path.DirectorySeparatorChar + @"Ts\" + txtTsBeanClassName.Text + ".ts", fileInfo, Encoding.UTF8);
+
+            fileInfo = EnvironmentSetting.TsInterfaceFileMode;
+            for (int i = 0; i < accessItems.Length; i++)
+            {
+                fileInfo = fileInfo.Replace("@" + i.ToString() + "@", accessItems[i]);
+            }
+            if (!Directory.Exists(dir.FullName + Path.DirectorySeparatorChar + @"Ts\")) { Directory.CreateDirectory(dir.FullName + Path.DirectorySeparatorChar + @"Ts\"); }
+            File.WriteAllText(dir.FullName + Path.DirectorySeparatorChar + @"Ts\" + txtTsBeanInterfaceName.Text + ".ts", fileInfo, Encoding.UTF8);
+
+            MessageBox.Show("OK");
+
+        }
+
+        private void BeanCreator_FormClosed(object sender, FormClosedEventArgs e)
+        {
+            if (msSqlNet != null) { msSqlNet.Dispose(); }
+        }
+
+        private void btnCreate_Click(object sender, EventArgs e)
+        {
+            string tableName = dataGridView1.CurrentRow.Cells[0].Value.ToString();
+            string baseName = tableName.Substring(2);
+
+            string root = Path.Combine(Application.StartupPath, @"Work");
+            if (!Directory.Exists(root)) { Directory.CreateDirectory(root); }
+            string[] accessItems = new string[6];
+            accessItems[0] = baseName;
+            accessItems[1] = tableName;
+            accessItems[2] = "";   //2.int id,int id....
+            accessItems[3] = "";   //3.ID = {id}
+            accessItems[4] = "HotelPms.DataAccessGrpc.Client";
+            accessItems[5] = chkUseInfo.Checked ? "UseInfo" : "Master";
+
+            string[] beanItems = new string[15];
+            beanItems[0] = baseName;   //�N���X
+            beanItems[1] = "";   //1.�v���C�}���[�L�[�ꗗ
+            beanItems[2] = "";   //2.CompareTo
+            beanItems[3] = "";   //3.CopyTo
+            beanItems[4] = "";   //4.Clear
+            beanItems[5] = "";   //5.ConvertDataRow�A
+            beanItems[6] = "";   //6.ToDataRow
+            beanItems[7] = "";   //7.AddSql
+            beanItems[8] = "";   //8.UpdateSql
+            beanItems[9] = "";   //9.ToText
+            beanItems[10] = "";   //10.GetField
+            beanItems[11] = "internal";
+            beanItems[12] = chkUseInfo.Checked ? "HotelPms.Data.UseInfo" : "HotelPms.Data.Master";
+            beanItems[13] = "";   //13.SetField
+            beanItems[14] = "";   //14.ConvertReader
+
+            string[] viewModelItems = new string[2];
+            viewModelItems[0] = baseName;
+            viewModelItems[1] = "";
+
+
+            string[] tableItems = new string[2];
+            tableItems[0] = "internal";
+            tableItems[1] = baseName;
+
+            string[] proto3Items = new string[5];
+            proto3Items[0] = baseName;
+            proto3Items[1] = "";
+            proto3Items[2] = "";
+            proto3Items[3] = chkUseInfo.Checked ? "UseInfo" : "Master";
+            proto3Items[4] = "";
+
+            string[] serviceItems = new string[3];
+            serviceItems[0] = baseName;
+            serviceItems[1] = tableName;
+            serviceItems[2] = chkUseInfo.Checked ? "UseInfo" : "Master";
+
+
+            string fieldList = string.Empty;
+            string indexList = string.Empty;
+            int addIndex = 0;
+            string ret = string.Empty;
+
+            string ret1 = string.Empty;
+            string fieldList1 = string.Empty;
+            int fieldCount = 0;
+            string whereList = string.Empty;
+            int whereCount = 0;
+            int uptIndex = 0;
+
+            int index = 0;
+            int pkCount = 0;
+            foreach (DataGridViewRow row in dataGridView2.Rows)
+            {
+                if (!CConvert.ToBool(row.Cells["colFieldSel"].Value)) { continue; }
+
+                string sqlType = row.Cells["Type"].Value.ToString();
+                string type = CommonFunc.ConvertToCsType(sqlType);
+                string name = row.Cells["Field"].Value.ToString();
+                string varName = $"p{name}";
+                string caption = row.Cells["Caption"].Value.ToString();
+                int maxLen = CConvert.ToInt(row.Cells["MaxLen"].Value);
+
+                if (CConvert.ToInt(row.Cells["PKFlg"].Value.ToString()) == 1)
+                {
+                    beanItems[1] += $"               PrimaryKey.TryAdd(\"{name}\", 0); " + Environment.NewLine;
+
+                    //�����L�[
+                    accessItems[2] += (accessItems[2].Length == 0 ? string.Empty : ",") + type + " " + varName;
+                    accessItems[3] += (accessItems[3].Length == 0 ? string.Empty : " AND ") + name + " = " + CommonFunc.ToSqlValue(type, varName);
+                    pkCount++;
+                }
+
+                beanItems[2] += (index == 0 ? "" : "                || ");
+                beanItems[2] += $"{name}.CompareTo(item.{name}) != 0";
+                beanItems[2] += Environment.NewLine;
+
+                beanItems[3] += string.Format("            item.{0} = {0};" + Environment.NewLine, name);
+                beanItems[4] += string.Format("            {0} = {1};" + Environment.NewLine, name, CommonFunc.GetDefValue(sqlType));
+                beanItems[5] += CommonFunc.GetConvertDataRowCode(type, name);
+                beanItems[14] += CommonFunc.GetConvertReaderCode(sqlType, name);
+                beanItems[6] += $"            row[\"{name}\"] = {CommonFunc.ToDataRow(type, name)};" + Environment.NewLine;
+                beanItems[9] += ("            text.AppendFormat(\"" + name + "={0};\", " + name + ");" + Environment.NewLine);
+                beanItems[10] += (Environment.NewLine + $"            {(index == 0 ? string.Empty : "else ")}if (name == \"{name}\")" + " { return " + name + "; }");
+                beanItems[13] += (Environment.NewLine + $"            {(index == 0 ? string.Empty : "else ")}if (name == \"{name}\")" + " { " + CommonFunc.GetConvertValue(type, name) + "return true; }");
+
+                if (sqlType.ToLower() == "datetime" && proto3Items[2].Length == 0) { proto3Items[2] = "import \"google/protobuf/timestamp.proto\";"; }
+                if ((sqlType.ToLower() == "decimal" || sqlType.ToLower() == "date") && proto3Items[4].Length == 0) { proto3Items[4] = "import \"customTypes.proto\";"; }
+                proto3Items[1] += $"  {CommonFunc.ToProto3Type(type)} {name} = {index + 1};{Environment.NewLine}";
+
+                viewModelItems[1] += (Environment.NewLine + "        Add(new ValidField() { Name = \"" + name + "\", Caption = \"" + caption + "\", MaxLenth = " + maxLen.ToString() + ", InputChar = " + CommonFunc.ToInputChar(sqlType) + " });");
+
+                #region �lj�sql
+
+                if (name.Equals("UpdateDate"))
+                {
+                    fieldList += ",UpdateDate";
+                    indexList += ",GETDATE()";
+                }
+                else
+                {
+                    if (addIndex > 0) { fieldList += ","; indexList += ","; ret += ","; }
+                    fieldList += name;
+                    indexList += CommonFunc.ToSqlValue(type, name);
+                    addIndex++;
+                }
+
+
+                #endregion
+
+                #region �X�Vsql
+
+                if (name.Equals("UpdateDate"))
+                {
+                    fieldList1 += ",UpdateDate = GETDATE()";
+                }
+                else
+                {
+                    if (uptIndex > 0) { ret1 += ","; }
+
+                    //�u����={index}�v�̎�
+                    string item = name + " = ";
+                    item += CommonFunc.ToSqlValue(type, name);
+
+                    if (CConvert.ToInt(row.Cells["PKFlg"].Value.ToString()) == 1)
+                    {
+                        if (whereCount > 0) { whereList += " AND "; }
+                        whereList += item;
+                        whereCount++;
+                    }
+                    else
+                    {
+                        if (fieldCount > 0) { fieldList1 += ","; }
+                        fieldList1 += item;
+                        fieldCount++;
+                    }
+                    uptIndex++;
+                }
+
+                #endregion
+
+                index++;
+            }
+
+            beanItems[7] = "            " + "return $@\"" + $"INSERT INTO {tableName}({fieldList}) VALUES({indexList});" + "\";";
+            beanItems[8] = "            " + "return $@\"" + $"UPDATE {tableName} SET {fieldList1} WHERE {whereList};" + "\";";
+
+            #region Work���ꎞ�t�@�C���쐬
+
+            //HotelPms.Client.Blazor>>ViewModel
+            CreateCsFile(root + @"\HotelPms.Client.Blazor\ViewModel", EnvironmentSetting.ViewModel, viewModelItems, $"{baseName}.cs");
+
+            //Protos
+            CreateCsFile(root + @"\Protos", EnvironmentSetting.Proto3Master, proto3Items, $"{baseName.ToLower()}.proto");
+
+            //HotelPms.GrpcService>>Service
+            CreateCsFile(root + @"\HotelPms.GrpcService\Services", EnvironmentSetting.BeanFileMode_ProtoEx_Service, serviceItems, $"{baseName}Service.cs");
+
+            //HotelPms.DataAccessGrpc.Client
+            accessItems[4] = "HotelPms.DataAccessGrpc.Client";
+            CreateCsFile(root + @"\HotelPms.DataAccessGrpc.Client", EnvironmentSetting.DataAccessFileMode, accessItems, $"{baseName}Access.cs");
+
+            beanItems[11] = "public";
+            tableItems[0] = "public";
+            if (chkUseInfo.Checked)
+            {
+                //ProtosExpan>>UseInfo>>
+                CreateCsFile(root + @"\ProtosExpan\UseInfo", EnvironmentSetting.BeanFileMode, beanItems, $"{baseName}.cs");
+            }
+            else
+            {
+                //ProtosExpan>>Master>>
+                CreateCsFile(root + @"\ProtosExpan\Master", EnvironmentSetting.BeanFileMode, beanItems, $"{baseName}.cs");
+                CreateCsFile(root + @"\ProtosExpan\Master", EnvironmentSetting.BeanFileMode_ProtoEx_Table, tableItems, $"{baseName}Table.cs");
+            }
+
+            #endregion
+
+            if (!chkCopy.Checked)
+            {
+                CConvert.StartFile(root); 
+                return;
+            }
+
+            #region Copy To Project
+
+            string projDir = @"\HotelPms.Client.Blazor\";
+            using (FileEdit.Core core = new FileEdit.Core())
+            {
+                FileEdit.Item item;
+                FileEdit.EditData edit;
+
+                //HotelPms.Client.Blazor>>ViewModel
+                File.Copy(root + @"\HotelPms.Client.Blazor\ViewModel\" + $"{baseName}.cs", txtSlnDir.Text + projDir + @"ViewModel\" + $"{baseName}.cs", true);
+                chkBlazorViewModel.Checked = true;
+
+                File.Copy(root + @"\Protos\" + $"{baseName.ToLower()}.proto", txtSlnDir.Text + @"\Protos\" + $"{baseName.ToLower()}.proto", true);
+                chkProtos.Checked = true;
+
+                //HotelPms.GrpcService>>Service
+                projDir = @"\HotelPms.GrpcService\";
+                edit = new FileEdit.EditData { FilePath = txtSlnDir.Text + $@"{projDir}Program.cs", Encoding = Encoding.UTF8 };
+                string line = $"app.MapGrpcService<{baseName}Service>().RequireCors(\"AllowAll\");";
+                if (!edit.Exists(line))
+                {
+                    item = new FileEdit.Item { Key1 = "app.MapControllers()", Key2 = "app.MapGrpcService" };
+                    item.Data.Add(line);
+                    edit.Data.Add(item);
+                }
+                core.Execute(edit); 
+                chkStartup.Checked = true;
+
+
+                File.Copy(root + @"\HotelPms.GrpcService\Services\" + $"{baseName}Service.cs", txtSlnDir.Text + projDir + @"Services\" + $"{baseName}Service.cs", true);
+                chkServices.Checked = true;
+
+                //HotelPms.DataAccessGrpc.Client
+                projDir = @"\HotelPms.DataAccessGrpc.Client\";
+
+                File.Copy(root + @"\HotelPms.DataAccessGrpc.Client\" + $"{baseName}Access.cs", txtSlnDir.Text + projDir + $"{baseName}Access.cs", true);
+                chkClientAccess.Checked = true;
+
+                edit = new FileEdit.EditData { FilePath = txtSlnDir.Text + $@"\HotelPms.Data.Client\HotelPms.Data.Client.csproj", Encoding = Encoding.UTF8 };
+                var edit2 = new FileEdit.EditData { FilePath = txtSlnDir.Text + $@"\HotelPms.Data.Server\HotelPms.Data.Server.csproj", Encoding = Encoding.UTF8 };
+
+                if (chkUseInfo.Checked)
+                {
+                    //HotelPms.Data.Client>>UseInfo>>
+                    File.Copy(root + @"\ProtosExpan\UseInfo\" + $"{baseName}.cs", txtSlnDir.Text + @"\ProtosExpan\UseInfo\" + $"{baseName}.cs", true);
+                    chkClientUse.Checked = true;
+
+                    //�N���C�A���g��
+                    line = $"    <Compile Include=\"..\\ProtosExpan\\UseInfo\\{baseName}.cs\" Link=\"ProtosExpan\\UseInfo\\{baseName}.cs\" />";
+                    item = new FileEdit.Item { Key1 = "<ItemGroup>", Key2 = "<Compile Include=\"..\\ProtosExpan" };
+                    item.Data.Add(line);
+                    if (!edit.Exists(line)) { edit.Data.Add(item); }
+
+                    //�T�[�o�[��
+                    if (!edit2.Exists(line)) { edit2.Data.Add(item); }
+                }
+                else
+                {
+                    //HotelPms.Data.Client>>Master>>
+                    File.Copy(root + @"\ProtosExpan\Master\" + $"{baseName}.cs", txtSlnDir.Text + @"\ProtosExpan\Master\" + $"{baseName}.cs", true);
+                    chkClientMaster.Checked = true;
+
+                    //�N���C�A���g��
+                    line = $"    <Compile Include=\"..\\ProtosExpan\\Master\\{baseName}.cs\" Link=\"ProtosExpan\\Master\\{baseName}.cs\" />";
+                    item = new FileEdit.Item { Key1 = "<ItemGroup>", Key2 = "<Compile Include=\"..\\ProtosExpan" };
+                    item.Data.Add(line);
+                    if (!edit.Exists(line)) { edit.Data.Add(item); }
+
+                    //�T�[�o�[��
+                    if (!edit2.Exists(line)) { edit2.Data.Add(item); }
+
+
+                    #region ?????Table.cs
+
+                    File.Copy(root + @"\ProtosExpan\Master\" + $"{baseName}Table.cs", txtSlnDir.Text + @"\ProtosExpan\Master\" + $"{baseName}Table.cs", true);
+                    chkClientTable.Checked = true;
+
+                    //�N���C�A���g���̂�
+                    line = $"    <Compile Include=\"..\\ProtosExpan\\Master\\{baseName}Table.cs\" Link=\"ProtosExpan\\Master\\{baseName}Table.cs\" />";
+                    item = new FileEdit.Item { Key1 = "<ItemGroup>", Key2 = "<Compile Include=\"..\\ProtosExpan" };
+                    item.Data.Add(line);
+                    if(!edit.Exists(line)) { edit.Data.Add(item); }
+
+                    #endregion
+                }
+
+                //�@HotelPms.Data.Client.csproj
+                line = $"	<Protobuf Include=\"..\\Protos\\{baseName.ToLower()}.proto\" GrpcServices=\"Client\" Link=\"Protos\\{baseName.ToLower()}.proto\" />";
+                item = new FileEdit.Item { Key1 = "<ItemGroup>", Key2 = "<Protobuf" };
+                item.Data.Add(line);
+                if (!edit.Exists(line)) { edit.Data.Add(item); }
+                core.Execute(edit);
+                chkClient.Checked = true;
+
+                //HotelPms.Data.Server
+                line = $"	<Protobuf Include=\"..\\Protos\\{baseName.ToLower()}.proto\" GrpcServices=\"Server\" Link=\"Protos\\{baseName.ToLower()}.proto\" />";
+                projDir = @"\HotelPms.Data.Server\";
+                item = new FileEdit.Item { Key1 = "<ItemGroup>", Key2 = "<Protobuf" };
+                item.Data.Add(line);
+                if (!edit2.Exists(line)) { edit2.Data.Add(item); }
+                core.Execute(edit2);
+                chkServer.Checked = true;
+            }
+
+            #endregion
+
+            MessageBox.Show("OK");
+        }
+
+        private void CreateCsFile(string root, string template, string[] items, string fileName)
+        {
+            if (!Directory.Exists(root)) { Directory.CreateDirectory(root); }
+            string fileInfo = template;
+            for (int i = 0; i < items.Length; i++)
+            {
+                fileInfo = fileInfo.Replace($"@{i}@", items[i]);
+            }
+            File.WriteAllText(root + Path.DirectorySeparatorChar + fileName, fileInfo, Encoding.UTF8);
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.10.0