【发布时间】:2017-10-25 14:39:14
【问题描述】:
我有一个实用程序,它应该通过将文件转换为备用文件格式来优化文件。如果它不能使文件更小,我希望返回原始文件。
设计是使用stdin in 和stdout 进行输入和输出。这是针对处理后的大小大于原始文件大小的情况。所有其他分支都经过测试可以正常工作。
char readbuffer[65536];
ssize_t readinbytes;
while ((readinbytes = fread(readbuffer, sizeof(char), insize, stdin)) > 0) {
if (fwrite(readbuffer, sizeof(char), readnbytes, stdout) != readnbytes) {
fatal("can't write to stdout, please smash and burn the computer\n");
}
}
问题这导致文件大小为 0
【问题讨论】:
-
@PaulOgilvie 鉴于代码看起来“cruft”代表“nothing”。
-
如何分辨二进制文件中的杂乱无章?
-
在使用标准输入后,我试图在程序开始时将标准输入原样发送到标准输出。我知道标准输入没有被关闭,但我记得如果之前访问过它是一个 PITA。我尝试 fseek 重置流中的位置,以便我可以从标准输入的第一个字节读取到最后一个字节。一次最多 64k。
-
@WeatherVane 这会尝试将值适合较小的值,检查更改后文件大小是否不同。如果一个文件有太多独特的块,没有保存,所以只是输出文件原样。我不需要编写程序,这种情况我似乎无法破解它
-
OT:
sizeof(char)根据定义等于 1,当您将sizeof(readbuffer)作为元素数传递时,您已经在隐式使用该事实。