从文件读取缓冲区并写回文件时出现C ++问题

时间:2014-09-04 20:04:49

标签: file input char buffer output

我写了一个非常复杂的程序,现在最后一件事就是找不到: 这就是我的工作:

我打开一个输入文件。我将输入文件 - char for char读入缓冲区。 然后我写入缓冲区的输出文件。

打开并读取文件后 - 缓冲区中的char数组看起来与文件完全相同。 输入文件包括任何可能的符号。实际上 - 如果输入文件是.jpg图像,我应该能够(在将扩展名更改为.dat之后)将其读入我的缓冲区,将其写入输出.dat文件,然后将扩展名更改回。 jpg并看到原始图片。

我在一个简单的2KB大.txt文件上运行了测试(制作.txt文件,将扩展名更改为.dat并运行我的程序)。 如果输入文件只包含简单字符(例如,数字流1234215 ......) - 输出文件是相同的(其大小也是2KB)。

如果输入文件由简单字符组成并且有新行(如果我点击了ENTER,我认为这是带有ACSII代码13的字符,但我怀疑其他一些符号也会导致这种情况) - 文件正确读取我的缓冲区(它的所有2048个字符,因为它的大小是2KB,与文件中的相同,甚至是ENTERS),但在我将其写回输出文件后,输出文件看起来同样,它似乎有相同数量的字符(没有遗漏,没有什么额外的)但它的大小更大(例如 - 如果输入是2KB,输出是2.33KB)。< / p>

这应该发生 - 我怀疑某处存在腐败,但我无法察觉它,而且我不知道在哪里看。

这就是我写文件的方式:

f=fopen("izlaz.dat","w");
file1 = FS::open(filename1, 'r');
long cnt = 0;
while(1) {
    if(file1->eof()==0) {
        char rb[1];
        file1->read(1,rb);
        fwrite(rb,1,1,f);
        cnt++;
    }
    else {
        std::cout << "cnt = " << cnt << std::endl;
        fclose(f);
        break;
    }
}

file1-&gt; read(1,rb)读取1个字符到rb

当写入或读取我的缓冲区时,我使用的基本上是char数组 char输入; buffer [pos] =输入; //写入缓冲区 char output = buffer [pos]; //从缓冲区中读取

我也试过从char输入到缓冲区[pos]以及从缓冲区[pos]到char输出的memcpy,但这对腐败没有影响(它仍然被破坏)

对不起文字墙 - 我希望有人可以帮帮忙。我已经独自尝试了3天:S

感谢!!!

1 个答案:

答案 0 :(得分:0)

以二进制模式打开文件("wb"):

f=fopen("izlaz.dat","wb");

Documentation:

  

文件访问模式标志&#34; b&#34;可以选择指定打开文件in binary mode。此标志对POSIX系统没有影响,但在Windows上,它会禁用对&#39; \ n&#39;的特殊处理。和&#39; \ x1A&#39;。