struct stud
{
int shifr;
char fio[255];
float srbal;
};
void binaryOut(stud *students, int n)
{
fstream file;
file.open("test2.txt", fstream::out | fstream::binary | fstream::trunc);
file.seekp(0, ios::beg);
for( int j = 0; j < n; j++)
{
file.write((unsigned char*)&students[j], sizeof(students[j]));
}
file.close();
}
[C++] Удаление данных из двоичного файла
Код:
надо удалить из файла те записи, в которых srbal < 3
пока написал только читая все записи из файла в массив в памяти и затем запись в обнулённый файл только тех у кого условие выполняется... а нельзя ли без чтения удалить нужные записи напрямую из файла?
написал вот так?
Код:
void binaryParse(void)
{
fstream file;
file.open("test2.txt", fstream::binary | fstream::in);
file.seekp(0, ios::beg);
stud stud2[100];
int i = 0;
while (!file.eof())
{
file.read((unsigned char*)&stud2, sizeof(stud2));
i++;
}
file.close();
file.open("test2.txt", fstream::binary | fstream::out | fstream::trunc);
for( int j = 0; j < i; j++ )
{
if (stud2[j].srbal < 3)
continue;
file.write((unsigned char*)&stud2[j], sizeof(stud2[j]));
}
file.close();
}
{
fstream file;
file.open("test2.txt", fstream::binary | fstream::in);
file.seekp(0, ios::beg);
stud stud2[100];
int i = 0;
while (!file.eof())
{
file.read((unsigned char*)&stud2, sizeof(stud2));
i++;
}
file.close();
file.open("test2.txt", fstream::binary | fstream::out | fstream::trunc);
for( int j = 0; j < i; j++ )
{
if (stud2[j].srbal < 3)
continue;
file.write((unsigned char*)&stud2[j], sizeof(stud2[j]));
}
file.close();
}