🐬

C#でお世話になったメソッド5選

2020/12/22に公開

初心者向け、性能ガン無視メソッド

初心者でもコードがわかりやすく、メソッドの単位が的確に小さいので今年お世話になったメソッド達です。
ただ、処理速度面は一つも考慮してないため、機能さえ実装できればいいといった(自分用)簡易アプリに安直に使うためのメソッドになってます。

アプリに組み込むことの多いメソッド5選

  • ファイルの存在判定
  • フォルダがなければ生成
  • CSVファイル読込
  • 文字コード変換
  • フォルダ内のファイルをすべて削除

上記メソッドはlog4netを使う前提のエラー時の処理、ログ出力をしてます。

ファイルの存在判定

ファイルを処理するアプリを作っているときには必須で使いますね。
対象ファイルがなければそもそも処理がうまくいくはずないので、わかるようにエラーを通知しないと無駄に悩むことになります。
処理対象ファイルが必ず存在するアプリを作っているときでも念のため入れています。

/// <summary>
/// 指定したファイルが存在するか判定を行う</summary>
/// <param name="fullFilePath">
///     検索するファイルのフルパス</param>
/// <returns>
///     存在した場合:true、ない場合:false</returns>
public static Boolean IsTargetFileExit(string @fullFilePath)
{
    if (System.IO.File.Exists(fullFilePath)) return true;
    return false;
}

フォルダがなければ生成

フォルダの作成はもちろん、アプリを新規環境で動かす時もこのメソッドで必要作業フォルダを自動生成するようにしておけば、フォルダがないといった忘れがちなエラーが防げて便利です。

/// <summary>
/// 指定したパスが存在しない場合、全てのディレクトリとサブディレクトリを作成</summary>
/// <param name="fldPath">
///     作成するフォルダ</param>
public static DirectoryInfo SafeCreateDirectory(string @fldPath)
{
    try
    {
        if (Directory.Exists(fldPath)) return null;
        return Directory.CreateDirectory(fldPath);
    }
    catch (Exception ex)
    {
        logger.Error("ディレクトリの作成に失敗しました。");
        logger.Error(ex.Message + "\r\n" + ex.StackTrace);
        throw;
    }
}

CSVファイル読込

このメソッドについては、ぱっと見のわかりやすさを重視しているので、使用しているデータ型の面で無駄なメモリや処理速度が遅い懸念しかないです。
ただ、CSVファイルを読み込んでちょっと中身を変換して出力したいときには便利なのでちょいちょい使います。

/// <summary>
/// CSVファイルの全データ読み込み</summary>
/// <param name="fullFilePath">
///     読み込むCSVのフルパス</param>
/// <returns>
///     string[][]</returns>
public static string[][] Loadcsv(string @fullFilePath)
{
    List<string[]> list = new List<string[]>();
    TextFieldParser parser = new TextFieldParser(fullFilePath, Encoding.GetEncoding("SHIFT_JIS"));
    
    logger.Info("処理対象ファイル:" + fullFilePath);

    try
    {
        // カンマ区切りの指定
        parser.TextFieldType = FieldType.Delimited;
        parser.SetDelimiters(",");
        // フィールドが引用符で囲まれているか
        parser.HasFieldsEnclosedInQuotes = true;

        while (!parser.EndOfData)
        {
            // 1行読み込み
            string[] column = parser.ReadFields();
            list.Add(column);
        }
        return list.ToArray();
    }
    catch (Exception ex)
    {
        logger.Error("CSVファイルの読み込みに失敗しました。");
        logger.Error(ex.Message+"\r\n"+ ex.StackTrace);
        throw;
    }
    finally
    {
        parser.Close();
    }
}

文字コード変換

主にSJISからUTF-8に変換したいときに使いますね。
使わないようで意外と使ってますね。

/// <summary>
/// 文字コード変換(SJIS→"destEnc"で指定した文字コード)</summary>
/// <param name="src">
///     変換したい文字列(SJIS)</param>
/// <param name="destEnc">
///     変換後の文字コード</param>
public static string ConvertEncoding(string src, Encoding destEnc)
{
    byte[] src_temp = Encoding.GetEncoding("SHIFT_JIS").GetBytes(src);
    byte[] dest_temp = Encoding.Convert(Encoding.GetEncoding("SHIFT_JIS"), destEnc, src_temp);
    string ret = destEnc.GetString(dest_temp);
    return ret;
}

フォルダ内のファイルをすべて削除

何か処理を行った後の元ネタファイルがいらないときなど、作業フォルダ内のファイルを一掃するときに使います。
バックアップがないと不安な人もいるようですが、自分は見ることあんまりないですし、消す作業すらめんどくさいのでだいたい元ファイルは消しがちです。

/// <summary>
/// 指定したフォルダ内のファイルをすべて削除</summary>
/// <param name="fldPath">
///     削除するフォルダパス</param>
public static void DelFiles(string fldPath)
{
    DirectoryInfo di = new DirectoryInfo(fldPath);
    foreach (FileInfo file in di.GetFiles())
    {
        file.Delete();
    }
}

以上、個人的によく使うメソッド5選でした。

最後に

最初にも書きましたが初心者向けかつ、コードの見やすさ重視なため技術的なことは温かい目で見てください。

Discussion