Итак, у меня есть двоичный файл, который я создаю и инициализирую. Если я установлю свой указатель на seekg = 0
или seekp = 0
, тогда я могу перезаписать строку текста нормально. Однако, если я прыгаю вперед на 26 байтов (размер одной строки моего файла и что-то, что я определенно подтвердил), он отказывается перезаписывать. Вместо этого он просто добавляет его перед двоичными данными и помещает старые данные дальше в строку. Я хочу, чтобы данные были полностью перезаписаны.
char space1[2] = { ',' , ' '};
int main()
{
CarHashFile lead;
lead.createFile(8, cout);
fstream in;
char* tempS;
tempS = new char[25];
in.open("CarHash.dat", ios::binary | ios::in | ios::out);
int x = 2000;
for(int i = 0; i < 6; i++)
tempS[i] = 'a';
int T = 30;
in.seekp(26); //Start of second line
in.write(tempS, 6); //Will not delete anything, will push
in.write(space1, sizeof(space1)); //contents back
in.write((char *)(&T), sizeof(T));
in.write(space1, sizeof(space1));
in.write(tempS,6);
in.write(space1, sizeof(space1));
in.write((char *)&x, sizeof(x));
//Now we will use seekp(0) and write to the first line
//it WILL overwrite the first line perfectly fine
in.seekp(0);
in.write(tempS, 6);
in.write((char*) &x, sizeof(x));
in.write(tempS, 6);
in.write((char *) &T, sizeof(T));
return 0;
}
CarHashFile
- это внешний класс, который создает двоичный файл, полный следующего содержимого, при запуске create file: "Free, "
1900
", Black, $"
0.00f
.
Все, что заключено в кавычки, было добавлено в виде строки, 1900 в виде целого числа и 0,00f в виде числа с плавающей точкой. Я добавил все это с помощью записи, так что я почти уверен, что это настоящий двоичный файл, я просто не знаю, почему он выбирает запись только по первой строке. Я знаю, что размер файла правильный, потому что если я установлю seekp = 26
, он будет печататься в начале второй строки и нажимать на него вниз. space
был создан, чтобы легко добавить комбо "," в файл, также есть массив char dol[1] = '$'
для простоты и char nl[1] = '\n'
, который позволяет мне добавить новую строку в двоичный файл (только что попытался удалить это двоичное добавление) и это заставило все в один ряд, так что, афаик, это нужно).
РЕДАКТИРОВАТЬ: Хорошо так, это стирало линию все время, это просто не вводило новую строку (вид смущения). Но сейчас я не могу понять, как вставить новую строку в файл. Я попытался написать это так, как делал изначально с char nl[1] = { '\n' }
. Это сработало, когда я впервые создал файл, но потом не получится. Есть ли другие способы добавить строки? Я тоже попробовал in << endl
и ничего не получил.