生成文本文件时的额外字节数

时间:2015-09-10 23:13:54

标签: c++ text file-manipulation

我正在尝试生成一个包含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编译的。

2 个答案:

答案 0 :(得分:2)

编辑:由于问题得到了一些额外的信息,这个答案的解释不再完全适合 - 解决方案应该仍然有效。

额外字节来自每行两个混合换行符(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);

答案 1 :(得分:0)

一些(windows)编译器取代&#34; \ n&#34;通过&#34; \ r \ n&#34;所以,如果你写&#34; \ r \ n&#34;你得到了&#39; \ r&#39;两次。

您需要做的就是使用endl代替"\r\n"

替换此行:

file << "\r\n";

由:

file << endl;