仕上げ【C#を始めよう】

C#でプログラムを始めてみる連載の16回目です。前回の記事はコチラです。 hirocom777.hatenadiary.org

少し修正

殆んど完成となりました。今回はやり残していた修正(?)をしようと思います。

f:id:HiroCom777:20211205213037j:plain

文字のエンコード

今回作成したテキストエディターで試したファイルは、すべて半角の英数字と記号でした。でも、皆さん日常で全角文字を使用しますよね。そこで問題になってくるのが文字コードです。かつて日本ではShift_JISという文字コードがよく使われていました。でも、最近はUTF-8が主流になってきています。

実を言うと、今回のテキストエディターもUTF-8でファイルを読み込み、保存するようになっています。今までその部分について具体的な説明をしませんでしたが、今回はそこを明確にしていきたいと思います。

エンコードを指定する

エンコードの指定をいつ行うかというと、ファイルの読み込みと保存の際に行います。つまりStreamReaderクラスとStreamWriterクラスでオブジェクトを作るときに指定するわけです。今まではそれぞれ以下の様に記述していました。

  StreamReader オブジェクト名 = new StreamReader(ファイル名);
  StreamWriter オブジェクト名 = new StreamWriter(ファイル名);

ここにはエンコードの指定がありません(指定がないとデフォルトでUTF-8になります)。エンコードの指定を行う場合には以下の様になります。まずはStreamReaderから。

  StreamReader オブジェクト名 = new StreamReader(ファイル名,エンコードの指定);

文字エンコードを指定するにはEncodingクラスを使用します。Encodingクラス静的クラスですのでオブジェクトを作らずにクラス名自体を指定して使います。MessageBoxクラスと一緒です。UTF-8を指定する場合にはEncoding.UTF8となります。

続いてStreamWriterです。

  StreamWriter オブジェクト名 = new StreamWriter(ファイル名,書込み方法,エンコードの指定);

2番目の書込み方法ですが、truefalseを指定します。trueならば、既存のファイル内容の末尾に書込みが行われる事になります。falseならばファイルの内容をすべて削除したうえで書込みを行います。今回はfalseを選びました。文字エンコードの指定はStreamReaderと同じです。

OpenFileSaveFileは以下の様になりました。

  private void OpenFile(String openName = "")
  {
      if (openName == "")
      {
          OpenFileDialog ofd = new OpenFileDialog();
          ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
          if (ofd.ShowDialog() != DialogResult.OK)
          {
              return;
          }
          openName = ofd.FileName;
      }
      StreamReader sr = new StreamReader(openName, Encoding.UTF8);//変更点
      this.txtMain.Text = sr.ReadToEnd();
      sr.Close();
      fileName = openName;
      this.Text = "TextEditor " + Path.GetFileName(fileName);
      fileChange = false;
  }

  private void SaveFile(String saveName = "")
  {
      if (saveName == "")
      {
          SaveFileDialog sfd = new SaveFileDialog();
          sfd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
          if (sfd.ShowDialog() != DialogResult.OK)
          {
              return;
          }
          saveName = sfd.FileName;
      }
      StreamWriter wr = new StreamWriter(saveName, false, Encoding.UTF8);//変更点
      wr.Write(this.txtMain.Text);
      wr.Close();
      fileName = saveName;
      this.Text = "TextEditor " + Path.GetFileName(fileName);
      fileChange = false;
  }

以上でテキストエディターの完成としたいと思います。

以上で完成

いかがでしたか?C#を使って簡単なWindowsツールを作ってみました。これをベースにして色々な機能を追加したり、改善したりしていくと、色々な学びがあると思います。この連載はこれで終了となりますが、またC#についてブログを書いてみたいと思います。最後までお付き合いいただきありがとうございました。

C#で簡単なツールを作る連載記事はコチラからどうぞ