前回の続きです。
「ファイル検索ツールを作ってみた – 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の使い方はこちらのページにわかりやすくまとめられています。
以上、ファイルの読み書きについての処理でした。
次回に続きます。
Pingback: ファイル検索ツールのソースコードを読んで勉強する(2) « 山本隆の開発日誌
Pingback: ファイル検索ツールのソースコードを読んで勉強する(4) « 山本隆の開発日誌