Как читать из файла и хранить при этом часть прочитанного в памяти?
Стоит такая задача. Есть большой файл, его надо прочитать посимвольно. При этом, надо постоянно держать в памяти последние несколько прочитанных символов.
#include <fstream>
#include <vector>
using std::vector, std::ios, std::ifstream;
int main() {
ifstream fIle;
fIle.open("myfile.bin", ios::in|ios::binary);
char ch;
vector<char> chm(8);
while(fIle.get(ch)) {
// и тут я запутался
}
Вот как наиболее адекватно реализовать такое? Читать кусками по 8 байт - нельзя! Надо читать строго по байту и при этом держать последние 8 прочитанных байт, в т ч только что прочитанный, в памяти...
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Ну читайте как в циклический буфер...
for(int k = 0; fIle.get(chm[k]); k = (k+1)%8)
{
// Тут делайте, что хотите :)
// i-й символ (считая с 1; только что введенный - 8-й)
// находится в chm[(k+i)%8]
}
Автор решения: RandomDice 779
→ Ссылка
Нашёл более интуитивно понятный ответ:
#include <fstream>
#include <vector>
using std::vector, std::ios, std::ifstream;
int main() {
ifstream fIle;
fIle.open("myfile.bin", ios::in|ios::binary);
char ch;
vector<char> chm(8);
for (unsigned int k=0; k < chm.size(); k++) {
chm[k] = ' '; // инициализируем пустой вектор
}
while(fIle.get(ch)) {
for (unsigned int j=7; j > 0; j--) {
chm[j-1] = chm[j]; // сдвигаем символы
}
chm[7] = ch;
}