ファイル検索ツールのソースコードを読んで勉強する(3)

前回の続きです。

ファイル検索ツールを作ってみた – C++Builder好きの秘密基地」で公開されているファイル検索ツールのソースコードを読んで勉強します。

ファイルの保存処理。

SaveTextFileDialog1のEncodingプロパティは次のように設定されています。

Shift-JIS
Unicode(UTF-16)
UTF-8

保存するときは、SaveTextFileDialog1のEncodingプロパティに該当するTEncodingを取得して、TStringList::SaveToFileで保存しています。

TEncoding* pEncoding;
switch (SaveTextFileDialog1->EncodingIndex) {
case 0: // Shift-JIS
      pEncoding = TEncoding::Default;
  break;
case 1: // UTF-16
      pEncoding = TEncoding::Unicode;
  break;
default: // UTF-8
      pEncoding = TEncoding::UTF8;
  break;
}
pBuffer->SaveToFile(SaveTextFileDialog1->FileName, pEncoding);

ファイルの読み込み処理。

次のコードでファイルの内容がbufferに入ります。なるほど。

ifstream ifs(AnsiString(FileName).c_str(), ios::binary);
istream_iterator<char>ifsiter(ifs), eof;
string buffer(ifsiter, eof);

読み込んだファイルの内容stringの文字コードを判別して、wstringに変換する処理。

文字コードの判別と変換にはbabelが使用されています。

//エンコーディングの判別
babel::analyze_result result(babel::analyze_base_encoding(buffer));

//エンコーディングを自動判別してUTF-16へ変換する
babel::auto_translate<wstring> trans(buffer, babel::base_encoding::utf16);
wstring UTF16String(trans);

babelの使い方はこちらのページにわかりやすくまとめられています。

以上、ファイルの読み書きについての処理でした。

次回に続きます。

コメント

  1. Pingback: ファイル検索ツールのソースコードを読んで勉強する(2) « 山本隆の開発日誌

  2. Pingback: ファイル検索ツールのソースコードを読んで勉強する(4) « 山本隆の開発日誌

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください