我在c ++中将大量数据保存到二进制文件时遇到问题,我正在使用CodeBlocks
我的代码:
CODEPAGE = '1252'
只需输入大量数据,然后将其保存到文件中。
奇怪的是,当从DEBUG配置文件中编译并运行它时,它运行良好,并且从发布版本运行时它会出现错误数字32 Broken Pipe
我去构建选项,似乎Produce debbuging符号会产生差异,当它在文件写入时成功,如果它关闭我会得到破碎管。
可以告诉some1为什么会出现此问题以及如何删除它。我需要我的应用程序非常快,我想产生的debbuging符号将减慢它。
答案 0 :(得分:1)
问题在于:
long test = fwrite(tablica,sizeof(long),sizeof(tablica),pFile);
在数组上调用sizeof以字节为单位返回数组的大小,而不是元素的数量,如下所述: How do I determine the size of my array in C?
所以你要告诉fwrite写40000多头,而不是10000多头。
它在调试模式下工作但未发布的原因可能是由于调试运行时中的检查。 (虽然你没有指定你正在使用的平台/编译器/运行时,所以很难肯定地说。)
我会像这样修理它:
long test = fwrite(tablica,1,sizeof(tablica),pFile);
你真的应该检查“测试”的返回值。
此外,我不是一次性尝试写入所有数据,而是在循环中进行一系列fwrite调用,一次写入一个千字节(1024字节)。