現在、ファイルの内容をchar配列に読み込もうとしています。
たとえば、char配列に次のテキストがあります。42バイト:
{
type: "Backup",
name: "BackupJob"
}
このファイルはWindowsで作成されており、Visual Studio c ++を使用しているため、OSの互換性の問題はありません。
ただし、次のコードを実行すると、forループの完了時に、インデックス:39が取得され、10の前に13が表示されません。
// Create the file stream and open the file for reading
ifstream fs;
fs.open("task.txt", ifstream::in);
int index = 0;
int ch = fs.get();
while (fs.good()) {
cout << ch << endl;
ch = fs.get();
index++;
}
cout << "----------------------------";
cout << "Index: " << index << endl;
return;
ただし、ファイルの長さのchar配列を作成しようとすると、以下のようにファイルサイズを読み取ると、合計ファイルサイズに起因する3つの追加のCR文字length
が42になり、配列の終わりが台無しになります。危険なバイトで。
// Create the file stream and open the file for reading
ifstream fs;
fs.seekg(0, std::ios::end);
length = fs.tellg();
fs.seekg(0, std::ios::beg);
// Create the buffer to read the file
char* buffer = new char[length];
fs.read(buffer, length);
buffer[length] = '\0';
// Close the stream
fs.close();
16進ビューアを使用して、ファイルにCRLF(13 10)バイトが実際に含まれていることを確認しました。
ファイルの終わりを取得することと、get()メソッドとread()メソッドが実際に返すものには違いがあるようです。
誰かがこれを手伝ってくれませんか?
乾杯、ジャスティン