.NET Core アプリケーションで Shift-JISのファイルを読み込む、書き込む - C#

.NET Core アプリケーションで Shift-JISのファイルを読み込む、書き込むコードを紹介します。

概要

.NET Core アプリケーションでShift-JISのファイルを読み込んだり、書き込むコードを紹介します。
以前の.NET Frameworkと同じコードを利用するとエラーが発生します。エラーの詳細についてはこちらの記事を参照して下さい。 このため、.NET Core でShift-JISのファイルを読み込む、書き込む場合はコードに追加が必要になります。

プログラム例

UI

下図のフォームを作成します。Buttonを2つ、複数行のTextBoxを1つ、OpenFileDialog、SaveFileDialogを配置します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace ShiftJISReadWrite
{
  public partial class FormSjisReadWrite : Form
  {
    public FormSjisReadWrite()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == DialogResult.OK) {
        FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open);
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("shift-jis"));
        string ReadText = sr.ReadToEnd();
        sr.Close();
        fs.Close();
        textBox1.Text = ReadText;
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
        FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate);
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("shift-jis"));
        sw.Write(textBox1.Text);
        sw.Close();
        fs.Close();
      }
    }
  }
}

解説

基本的なコードは.NET Frameworkでテキストファイルを読み込む、書き込むコードと同様になります。
読み込みの場合は、[ファイルを開く]ダイアログボックスを開き、ファイルを選択すると、FileStream オブジェクトを作成します。
続いてテキストファイルを読み込むための StreamReader オブジェクトを作成しますが、Shift-JIS エンコーディングを指定するとエラーが発生するため、 StreamReaderオブジェクト作成前にEncoding.RegisterProviderメソッドを呼び出し、プロバイダーを登録します。
プロバイダー登録後に StreamReader オブジェクトを作成します。 ファイルからの読み込みは StreamReaderオブジェクトの ReadToEnd() メソッドを呼び出します。
読み込み後、StreamReader FileStream オブジェクトをCloseします。
最後に読み込んだ文字列をテキストボックスに表示します。
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
  FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open);
  Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("shift-jis"));
  string ReadText = sr.ReadToEnd();
  sr.Close();
  fs.Close();
  textBox1.Text = ReadText;
}

書き込みの場合は、[ファイルを保存する]ダイアログボックスを開き、ファイルを指定すると、FileStream オブジェクトを作成します。
読み込みの場合と同様に、StreamWriterオブジェクト作成前にEncoding.RegisterProviderメソッドを呼び出し、プロバイダーを登録します。
プロバイダー登録後に StreamWriter オブジェクトを作成します。 ファイルへの書き込みは StreamWriterオブジェクトの Writer() メソッドを呼び出します。
読み込み後、StreamWriter FileStream オブジェクトをCloseします。
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
  FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate);
  Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("shift-jis"));
  sw.Write(textBox1.Text);
  sw.Close();
  fs.Close();
}

実行結果

読み込み用のテキストファイルを準備します。今回は以下のテキストファイルを用意します。
このファイルは
Shift-JISエンコーディングされた
テキストファイルです。


プロジェクトを実行します。下図のウィンドウが表示されます。


[Read]ボタンをクリックします。ダイアログボックスが表示されますので、用意したテキストファイルを選択して読み込みます。 テキストファイルの内容がテキストボックスに表示されます。


続いてテキストボックスに別の文字列を入力します。入力ができたら[Write]ボタンをクリックします。


ダイアログボックスが表示されますので、保存するファイル名を設定し保存します。保存できるとファイルが作成されます。


作成されたファイルをメモ帳で開きファイルの内容を確認します。テキストボックスに入力した文字列がファイルに書き込まれています。 またエンコーディングが ANSI (日本語は Shift-JIS) になっていることも確認できます。


.NET Core のアプリケーションでShift-JISでテキストファイルの読み込みや書き込みができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2020-06-07
作成日: 2020-06-07
iPentec all rights reserverd.