ホームページ > バックエンド開発 > C++ > C で ifstream::read() と istreambuf_iterator を使用してファイルの内容を文字配列として読み取る方法は?

C で ifstream::read() と istreambuf_iterator を使用してファイルの内容を文字配列として読み取る方法は?

DDD
リリース: 2024-11-01 00:57:02
オリジナル
450 人が閲覧しました

How to read file contents as a character array in C   using ifstream::read() and istreambuf_iterator?

C でファイルの内容を文字配列として読み取る方法

背景

この質問inputFile という名前のファイルのバイトを文字配列バッファーに移入する方法を尋ねます。ユーザーは、ifstream::read() の代わりに getline() を使用する他の提案されたアプローチで問題が発生しました。

解決策

これに対処するアプローチはいくつかあります。 task:

ifstream::read() の使用

このメソッドには以下が含まれます:

  1. ファイルを開く:文字変換を避けるために、std::ifstream を使用してファイルをバイナリ モードで開きます。
  2. ファイル サイズの決定: ファイルの長さを取得するには、seekg() と Tellg() を使用します。
  3. データの読み取り: read() を呼び出してファイルの内容をバッファに読み取り、バッファ サイズが十分であることを確認します。

コード例:

<code class="cpp">// Open file in binary mode
std::ifstream infile("C:\MyFile.csv", std::ios_base::binary);

// Get file length
infile.seekg(0, std::ios::end);
size_t length = infile.tellg();
infile.seekg(0, std::ios::beg);

// Read file
infile.read(buffer, length);</code>
ログイン後にコピー

istreambuf_iterator の使用

このアプローチはより現代的で、反復子を使用してファイルを読み取ります。

  1. Istreambuf_iterator: std::istreambuf_iterator(infile) を開始反復子に割り当て、std::istreambuf_iterator() を終了反復子に割り当てます。
  2. 文字を格納するためにベクトルを使用します。 ベクトル std::vector を作成します。そして開始反復子から終了反復子までのすべての文字をベクターにプッシュします。
  3. ベクトルを配列にコピー: std::copy を使用してベクトル データをバッファーに割り当てます。

コード例:

<code class="cpp">// Create iterators
std::istreambuf_iterator<char> begin(infile);
std::istreambuf_iterator<char> end;

// Create vector
std::vector<char> contents(begin, end);

// Copy vector to array
std::copy(contents.begin(), contents.end(), buffer);</code>
ログイン後にコピー

考慮事項

  • ファイル サイズの制限: ifstream::ファイルサイズがそのサイズを超えると、read() がバッファをオーバーフローする可能性があります。代わりにバッファ読み取りまたはサイズ変更可能なバッファの使用を検討してください。
  • エラー処理: 読み取り試行後に infile.fail() または infile.eof() を使用して潜在的な読み取りエラーを確認します。
  • バイナリ モード: ファイルに非 ASCII 文字が含まれている場合は、元のエンコーディングを維持するためにバイナリ モードで開きます。

以上がC で ifstream::read() と istreambuf_iterator を使用してファイルの内容を文字配列として読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート