C#でファイルがロックされているかどうか判定

 

ファイルがロックされているかどうか判定

public class ExchangeUtil : PublicWebApiUtil {
    /// ファイルが開かれてロックされているかどうか
    /// true:ロックされている/false:されていない
    public static bool IsFileLocked(string path) {
        FileStream stream = null;
        if (!File.Exists(path)) {
            return false;
        }
        try {
            stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
        } catch {
            return true;
        }
        finally {
            if (stream != null) {
                stream.Close();
            }
        }
     
        return false;
    }
}

C#でISO8601形式の継続時間文字列をTimeSpanに変換

 

ISO8601形式の継続時間文字列をTimeSpanに変換

public class ExchangeUtil : PublicWebApiUtil {
    /// 
    /// ISO8601形式の文字列をTimeSpanに変換します。
    /// 
    /// ISO8601形式の文字列
    /// 
    public static TimeSpan Iso8601ToTimeSpan(string iso8601) {
        if (iso8601 == null || iso8601 == "") {
            //0秒で返す。
            return new TimeSpan(0, 0, 0);
        }
        TimeSpan? ret = null;
        int index = iso8601.IndexOf("D");
        if (index > 0) {
            //日付部("P1D")が存在する場合
            string strDays = iso8601.Substring(0, index);
            TimeSpan days = new TimeSpan(int.Parse(strDays.Replace("P", "")), 0, 0, 0);
            ret = days;

            //時間部が存在する場合
            index = iso8601.IndexOf("DT");
            if (index > 0) {
                TimeSpan other = XmlConvert.ToTimeSpan("PT" + iso8601.Substring(index + 2));
                ret = days.Add(other);
            }
        } else {
            ret =  XmlConvert.ToTimeSpan(iso8601.Replace("P", "PT"));
        }
        return new TimeSpan(ret.Value.Days, ret.Value.Hours, ret.Value.Minutes, 0);
    }
}

C#でランダムに色を生成する方法

 

ランダムに色を生成

public class ExchangeUtil : PublicWebApiUtil {
    /// 
    /// ランダムカラー取得
    /// 
    /// シードとなる疑似乱数ジェネレータ
    /// 
    public Color GetRandomColor(Random r) {
        int red = r.Next(256);
        int green = r.Next(256);
        int blue = r.Next(256);

        return Color.FromArgb(red, green, blue);
    }
}

淡い色だけ生成

public class ExchangeUtil : PublicWebApiUtil {

    /// 淡いランダムカラー取得
    /// 
    /// シードとなる疑似乱数ジェネレータ
    /// 
    public Color GetPaleRandomColor(Random r) {
        int red = r.Next(100, 256);
        int green = r.Next(100, 256);
        int blue = r.Next(100, 256);

        return Color.FromArgb(red, green, blue);
    }
}

C#でメール送信


メール送信サンプル

public class ExchangeUtil : PublicWebApiUtil {
    /// <summary>
    /// メール送信
    /// </summary>
    /// <param name="fromAddress">送信元アドレス</param>
    /// <param name="toAddress">送信先アドレス</param>
    /// <param name="subject">件名</param>
    /// <param name="body">メール本文</param>
    public void SendMail(string fromAddress, string toAddress, string subject, string body) {
        MailMessage msg = new MailMessage();
        SmtpClient sc = new SmtpClient();
        try {
            msg.From = new MailAddress(fromAddress, "表示名");
            msg.To.Add(new MailAddress(toAddress, ""));
            //件名
            msg.Subject = subject;
            //本文
            msg.Body = body;

            //SMTPサーバーなどを設定する
            sc.Host = this.SmtpAddress;
            sc.Port = this.SmtpPort;
            sc.DeliveryMethod = SmtpDeliveryMethod.Network;
            //メッセージを送信する
            sc.Send(msg);
        } finally {
            msg.Dispose();
            sc.Dispose();
        }
    }
}

PowerShellを使ってポートの疎通確認をする方法

 PowerShellを使ってポートの疎通確認をする機会があったので、その時の方法をメモ。

疎通できている場合、TcpTestSucceededがTrueで表示されます。

・「Windowsキー + R」で以下を入力してPowerShellを起動。

powershell

・以下のコマンドを実行。

Test-NetConnection -ComputerName 192.168.10.66 -Port 475

ComputerName           : 192.168.10.66
RemoteAddress          : 192.168.10.66
RemotePort             : 475
InterfaceAlias         : イーサネット 4
SourceAddress          : 192.168.10.65
PingSucceeded          : True
PingReplyDetails (RTT) : 2 ms
TcpTestSucceeded       : True

C#で外為オンラインから為替レートを取得してみた

 為替レートを取得するサンプルです。

「Yahoo Finance」、「Google Finance」が廃止となったので、外為オンラインから取得してみました。


為替レート取得クラス

public class ExchangeUtil : PublicWebApiUtil {
    public enum CurrencyPairCode : int {
        //英ポンド/NZドル
        GBPNZD = 1,
        //カナダドル/NZドル
        CADJPY,
        //英ポンド/AUドル
        GBPAUD,
        //AUドル/円
        AUDJPY,
        //AUドル/NZドル
        AUDNZD,
        //ユーロ/カナダドル
        EURCAD,
        //ユーロ/米ドル
        EURUSD,
        //NZドル/円(jsonString);

        return ds.Tables[0];
    }

    // 指定した貨幣コードの始値を取得
    public Decimal GetOpenPrice(CurrencyPairCode currencyPairCode) {
        Decimal price = -1;

        DataTable exchangeTbl = GetExchangeRateTable();
        DataRow[] rows = (
            from row in exchangeTbl.AsEnumerable()
            let qOpenPrice = row.Field(EnumUtil.GetLabel(RateTableColIdx.Open))
            let qCurrencyPairCode = row.Field(EnumUtil.GetLabel(RateTableColIdx.CurrencyPairCode))
            where qCurrencyPairCode == EnumUtil.GetName(currencyPairCode)
            select row).ToArray();

        price = Decimal.Parse(rows[0][(int)RateTableColIdx.Open].ToString());

        return price;
    }

}

親クラス

public class PublicWebApiUtil {
    public PublicWebApiUtil() {
    }
    /// WebAPI呼び出し
    protected string GetResponseString(string url) {
        HttpWebRequest req = null;
        HttpWebResponse res = null;
        StreamReader sr = null;
        string jsonString = "";
        try {
            //サーバーからデータを受信する
            req = (HttpWebRequest)WebRequest.Create(url);
            res = (HttpWebResponse)req.GetResponse();
            sr = new StreamReader(res.GetResponseStream());
            //すべてのデータを受信する
            jsonString = sr.ReadToEnd();
        } finally {
            sr.Close();
            res.Close();
        }
        return jsonString;
    }
}

使い方

     public void GetPriceRate() {
         ExchangeUtil eu = new ExchangeUtil();
         //始値のレートを取得
         Decimal d = eu.GetOpenPrice(ExchangeUtil.CurrencyPairCode.USDJPY);
     }

厳選 Excelショートカット集

 

改ページプレビュー切替

操作ショートカットキー
改ページプレビュー「Alt」,「w」, 「i」
ページレイアウト「Alt」,「w」, 「p」
標準「Alt」,「w」, 「l」

ジャンプ

操作ショートカットキー
先頭にジャンプ「Ctrl + Home」(「Ctrl + Fn + Home」)
末尾にジャンプ「Ctrl + End」(「Ctrl + Fn + End」)
任意のセルをジャンプ「F5」

日付/時刻の入力

操作ショートカットキー
現在日付「Ctrl + ;」
現在時刻「Ctrl + :」
現在日時「Ctrl + ;」 + ' ' + 「Ctrl + :」

罫線

操作ショートカットキー
外枠罫線「Ctrl + &」(「Ctrl + Shift + 6」)
罫線解除「Ctrl + _」(「Ctrl + Shift + \」)

書式だけ貼り付け/値だけ貼り付け

右クリックとの合わせ技です。 または、右クリックの代わりに「Ctrl + Alt + v」でも同様の操作になります。

操作ショートカットキー
書式だけ貼り付け右クリック + 「s」 + 「t」
値だけ貼り付け右クリック + 「s」 + 「v」

行選択/列選択

操作ショートカットキー
行選択「Shift + Space」
列選択「Ctrl + Space」

フォント関連

操作ショートカットキー
打消し線のON/OFF「Ctrl + 5」
太字のON/OFF「Ctrl + b」
斜体のON/OFF「Ctrl + i」

シート操作関連

操作ショートカットキー
新しいワークシートを追加「Shift + F11」
次のワークシートへ移動「Ctrl + PageDown」
前のワークシートへ移動「Ctrl + PageUp」

ファンクションキー

ファンクションキー動作代替キー
「F2」アクティブセルを編集状態にする。
「F4」直前の動作を繰り返す。
「F4」(数式編集中)絶対参照と相対参照の切替える。
「F5」ジャンプダイアログボックスを表示。「Ctrl + g」
「F7」スペルチェック。(デフォルトでは英語のみ)
「F8」拡張選択モードの切替え。
「F9」開いているブックの全ワークシートを再計算する。
「F10」キーヒントの表示切替え。「Alt」
「F11」現在の選択範囲でグラフを作成。
「F12」「名前を付けて保存」ダイアログを表示。

厳選 Visual Studioの便利なショートカット

  エラー箇所にジャンプ 「Ctrl + Shift + F12」 ブレークポイント 設定/解除 「F9」 有効化/無効化 「Ctrl + F9」 ViEmu特有 「:ls」:バッファナンバーのリストを表示。 「:b2」:バッファ2のファイルを開く。 「:n」:次のバッファのファ...