【发布时间】:2014-10-29 17:04:17
【问题描述】:
我写了一个非常复杂的程序,现在它正在调试最后一件事: 我就是这样做的:
我打开一个输入文件。我将输入文件 - char for char 读入缓冲区。 然后我从缓冲区写入输出文件。
打开并读取文件后 - 缓冲区中的字符数组看起来与文件完全相同。 输入文件包括任何可能的符号。事实上 - 如果输入文件是 .jpg 图像,我应该能够(在将扩展名更改为 .dat 后)将其读入我的缓冲区,将其写入输出 .dat 文件,然后将扩展名更改回 . jpg 并查看原图。
我对一个简单的 2KB 大 .txt 文件进行了测试(制作了一个 .txt 文件,将扩展名更改为 .dat 并运行了我的程序)。 如果输入文件仅包含简单字符(例如,数字流 1234215...),则输出文件是相同的(其大小也是 2KB)。
如果输入文件由简单字符组成并且有新行(如果我按 ENTER,我认为这是 ACSII 代码 13 的字符,但我怀疑其他一些符号也会导致这种情况)- 文件被读取正确到我的缓冲区(它的所有 2048 个字符,因为它的大小为 2KB,与文件中的相同,甚至是 ENTERS),但是在我将它写回输出文件后,输出文件 看起来 em> 一样,它似乎有相同数量的字符(什么都没有,也没有多余的),但它的大小更大(例如 - 如果输入是 2KB,输出是 2.33KB)。
这应该发生 - 我怀疑某处存在损坏,但我无法检测到它并且我不知道在哪里查找。
这是我写入文件的方式:
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->read(1,rb) 读取 1 个字符到 rb
在写入或读取缓冲区(基本上是 char 数组)时,我使用 字符输入;缓冲区[位置] = 输入; // 写入缓冲区 字符输出 = 缓冲区 [位置]; //从缓冲区读取
我也尝试过从 char 输入到缓冲区 [pos] 以及从缓冲区 [pos] 到 char 输出的 memcpy,但这对损坏没有影响(它仍然被损坏)
对不起,文字墙 - 我希望有人能帮忙。我已经自己尝试了 3 天 :S
谢谢!!!
【问题讨论】:
标签: file input char buffer output