1

VC ++環境では、(文字列)getline関数を使用して、開いているファイルの個別の行を読み取ります。問題は、getlineがファイルの終わりとして文字1Ahを取り、それが行に存在する場合、全体の読み取りが途中で終了することです。これに対する解決策はありますか?

コードスニペット:

fstream LogFile (Source,fstream::in);
string Line

while (getline(LogFile,Line))
{  ....  }

ファイルの内容:

line1text1asdf
line2text2asd //EOF for getline here
line3asdas // this line will never be read by getline

情報ありがとうございます。

クラ

4

3 に答える 3

2

はい、Ctrl + Zは、古いオペレーティングシステムのテキストファイルのEOFファイル文字でした。これは、テキストファイルに実際に存在してはならない制御文字であり、意味のある翻訳はできません。Openmode :: binaryは、それが必要な場合にできることのほぼすべてです。

于 2010-05-29T16:31:53.590 に答える
-1

getlineを、ユーザーが定義した行の終わりまたはeofまで文字ごとに読み取る手巻き関数に置き換えます。

于 2010-05-29T16:30:22.010 に答える
-1

私は通常、ファイルをバイナリとして開き、以下の関数でデータを読み取り、'\n' と '\r' を解析して行末を検出することを好みます。

UINT xread(HFILE hfile, void *buf, UINT size)
{
   UINT ret;


   #if defined(_WIN32)

   ret = _read(hfile, buf, size);

   #elif defined(_LINUX) || defined(__APPLE__)

   ret = read(hfile, buf, size);

   #endif


   return(ret);
}
于 2010-05-29T17:48:06.910 に答える