良いねや読者登録

有り難うございます。笑い泣き

 

昨日は雪が降りました!!ネガティブ

 

風も強くて、バイクの1ヶ月点検に

行こうと思っていたのですが橋の上

で飛ばされそうだったので断念真顔

 

あしあと

 

SEの方に見られるといきなり叱られ

そうなところからニヤリ

 

パブリック変数用のクラスを作る

 

     Const.cs

namespace プロジェクト名
{
    public static class Const
    {
        public static string Ini_FilePath = @"\\サーバー名\パス\AAA.ini";
    }
}

INIファイルのパスをパブリック変数

用のクラスに記述しています。

INIファイルのファイル名はAAA.iniに

しています。

 

     呼び出し元

namespace プロジェクト名
{
    public partial class Form4 : Form
    {
        //logファイルのパスをiniファイルから取得する
        public string logpath = IniFiles.GetIniString("LOGPATHA", "LOGPATH", Const.Ini_FilePath);

GetIniString()は後で出てきます。

 

あしあと

 

Iniファイルを使う


      INIファイル AAA.ini

[LOGPATHA]
LOGPATH=\\サーバー名\パス\BBB.log

[ERRORPATHA]
ERRORPATH=\\サーバー名\パス\

ログファイル名はBBB.logにしています。

ERRORPATHは今回は使いません。

 

パブリック変数を利用するメリットは

変更になった場合、1ヶ所だけ書き

換えれば良いという点ですが、業界

では推奨されてないようです。無気力

 

パブリック変数を極力少なくしてINI

ファイルに変数を記述します。

 

INIファイルを用いるメリットはプログ

ラムを閉じても設定値を覚えている

点とプログラムからも変更でき、また、

プログラム外からも変更、参照できる

点です。

 

      Iniファイルを使うクラス IniFiles.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace プロジェクト名
{
    /// <summary>
    /// INIファイルの読み書きクラス
    /// </summary>
    class IniFiles
    {
        [DllImport("KERNEL32.DLL")]
        private static extern uint GetPrivateProfileString(
            string lpAppName,
            string lpKeyName,
            string lpDefault,
            StringBuilder lpReturnedString,
            uint nSize,
            string lpFileName);

        [DllImport("KERNEL32.DLL")]
        private static extern uint GetPrivateProfileInt(
            string lpAppName,
            string lpKeyName,
            int nDefault,
            string lpFileName);

        [DllImport("KERNEL32.DLL")]
        private static extern uint WritePrivateProfileString(
            string lpAppName,
            string lpKeyName,
            string lpString,
            string lpFileName);


        /// <summary>
        /// INIファイルから値を取得する
        /// </summary>
        /// <param name="lpSection">セッション名称</param>
        /// <param name="lpKeyName">キー名称</param>
        /// <param name="lpFileName">INIファイル名</param>
        /// <returns></returns>
        public static string GetIniString(string lpSection, string lpKeyName, string lpFileName)
        {
            System.Text.StringBuilder strValue = new System.Text.StringBuilder(1024);

            uint sLen = GetPrivateProfileString(lpSection, lpKeyName, "", strValue, 1024, lpFileName);

            return strValue.ToString();
        }

        /// <summary>
        /// INIファイルに値を書き込む
        /// </summary>
        /// <param name="lpSection">セッション名称</param>
        /// <param name="lpKeyName">キー名称</param>
        /// <param name="lpValue">セットする値</param>
        /// <param name="lpFileName">INIファイル名</param>
        /// <returns></returns>
        public static bool PutIniString(string lpSection, string lpKeyName, string lpValue, string lpFileName)
        {
            long result = WritePrivateProfileString(lpSection, lpKeyName, lpValue, lpFileName);
            return result != 0;
        }
    }
}

 

パブリック変数のところで出てきた

GetIniString()を使ってlogファイル

のパスをiniファイルから取得できま

す。

 

あしあと

 

ログに書き込む

 

Logを使う関数も用意されているよう

なのですがここでは上のパブリック変

数のところで取得したlogpathに簡単に

書き込みます。口笛

 

      システムバージョンを書き込む

using System.IO;

File.を使うために必要

 

        private void Form4_Load(object sender, EventArgs e)
        {
            Form4.Form4Instance = this;
            //バージョン情報を表示する
            string version = GetVersion();
            //logファイルに書き出す
            string value = " System version" + version + " Start!!";
            string appendText = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + value + Environment.NewLine;
            File.AppendAllText(logpath, appendText);

            button1.PerformClick();
            this.WindowState = FormWindowState.Minimized;
        }

button1.PerformClick()はプログラムで

ボタン1をクリックする関数です。

this.WindowState = FormWindowState.Minimized;

はForm4ロード時にウィンドウを最小化しています。

ログファイルの説明とは関係ありません。(サービス)

 

      バージョンを取得する関数

        private string GetVersion()
        {
            string ver = "";
            //発行済みの本番環境でしか表示されない
            if (!ApplicationDeployment.IsNetworkDeployed)
            {
                this.label3.Text = "";
                return ver; 
            }
            var version = ApplicationDeployment.CurrentDeployment.CurrentVersion;
            ver = "version " +
                version.Major.ToString() + "." +
                version.Minor.ToString() + "." +
                version.Build.ToString() + "." +
                version.Revision.ToString();
            label3.Text = ver;
            return ver;
        }

バージョンを取得してlabel3に表示し、

呼び出し元に返しています。

デバッグ画面ではバージョンは表示

されません。

 

      ウィンドウの×ボタンが押されたときログに書き出す

        private void Form4_FormClosing(object sender, FormClosingEventArgs e)
        {
            //logに書き出す
            string appendText = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + " System Close!! " + Environment.NewLine;
            File.AppendAllText(logpath, appendText);
        }

 

      エラー内容をログに書き出す(指定したディレクトリが無い場合の例)

            try
            {

                //dirフォルダのファイル名を取得する
                string[] fileNames = Directory.GetFiles(dir);

            }
            catch(IOException ex)
            {
                //エラー内容をlogファイルに書き出す
                //logファイルに書き出す
                string appendText = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + " " + ex.Message.ToString() + " " + Environment.NewLine;
                File.AppendAllText(logpath, appendText);

        //Throwしてないのでfinally実行後、

        //呼び出し元に帰ります。
            }
            finally
            {
                //エラーがあっても無くても実行する文

        //カーソルを戻すとか、「実行中」を「待機中」に

        //変えるとか
            }

 

割と使えそうなので3件

まとめて紹介しました。

 

ご利用下さい。ニコニコ

 

 

   

このブログが良いなって

思った方は『良いね』をクリックおねがい

 

続きも読んで頂ける方は

『読者登録』ラブ