Дополнительные байты при генерации текстового файла

Я пытаюсь создать текстовый файл, который имеет 50 строк, каждая строка состоит из 50 пробелов. Однако каждые несколько строк, 9 или 10 дополнительных байтов добавляются в файл.

#include <iostream>
#include <fstream>
using namespace std;

void InitializeCanvas() {
ofstream file("paint.txt");
int b = 0;
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 50; j++) {
file << " ";
}
file << "\r\n";

//these lines show where the pointer is and where it should be
b += 52;
int pointer = file.tellp();
int difference = pointer - b;
cout << pointer << " (" << (difference) << ")" << endl;
}
file.close();
}

int main() {
InitializeCanvas();
return 0;
}

В строке 9 добавлено 9 дополнительных байтов. В строках 19 есть 19 дополнительных байтов. То же самое для 29, 39 и 49. Никаких дополнительных байтов не добавляется, за исключением тех строк. Что может быть причиной этого? Этот код был скомпилирован с использованием CodeBlocks 13.12.

0

Решение

Изменить: Поскольку вопрос получил некоторую дополнительную информацию, объяснение этого ответа больше не подходит полностью — все же решение должно работать.

Дополнительные байты поступают из двух смешанных символов новой строки в строке (NL+CRLF). Давайте посмотрим на конец строки, потому что \n уже истолковано\r\n в вашем компиляторе.

...  20     0D   0D   0A
... Space   NL   CR   LF

Решение в конструкторе ofstream, Это в текстовом режиме.

explicit ofstream (const char* filename, ios_base::openmode mode = ios_base::out);

Просто используйте \n или запишите свои данные в двоичном формате, или используйте endl,

ofstream file("paint.txt", std::ios_base::binary | std::ios_base::out);
2

Другие решения

Некоторые (windows) компиляторы заменяют «\ n» на «\ r \ n», поэтому, если вы напишите «\ r \ n», вы получите ‘\ r’ дважды.

Все, что вам нужно сделать, это использовать endl вместо "\r\n"

замените эту строку:

file << "\r\n";

от:

file << endl;
0

По вопросам рекламы [email protected]