良いねや読者登録
有り難うございます。
昨日は雪が降りました!!
風も強くて、バイクの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件
まとめて紹介しました。
ご利用下さい。
このブログが良いなって
思った方は『良いね』をクリック
続きも読んで頂ける方は
『読者登録』