我正在编写一个在不同客户端之间传输文件的程序,但我遇到了一个小问题。
我遇到了一个不起作用的例子。
我有一个 pdf 文件,我正在使用 fread
阅读它:
bytes = fread(chunk, 1, BUFLEN - 1, from_file);
经过一些调试我发现这行代码没有读取BUFLEN - 1
字节(哦顺便说一句,文件很大,我只迭代一次以获取第一个BUFLEN - 1
字节,因此文件超过 BUFLEN - 1
字节)。 fread
的返回值实际上是 BUFLEN - 1
,但将此 block 写入文件后,它的大小要小得多。
我想 fread
在遇到某些东西时会停止读取,但我找不到是什么。
我用 "rb"
打开文件,所以这也不是问题所在。此外,我的程序似乎可以很好地读取任何大小的任何文本文件,这就是我认为它在查找不同类型的字节时会出现一些问题的原因。
编辑:我正在通过
发送 block send(socksv, chunk, strlen(chunk), 0);
在接收中:
n = recv(i, chunk, BUFLEN - 1, 0);
然后我就这样写了
fwrite(chunk, 1, strlen(chunk), copy_file);
最佳答案
问题几乎可以肯定是 strlen()
的使用,因为当它看到一个零字节时它会停止写入(无论是写入套接字还是写入文件),几乎可以肯定的是在 PDF 里面。您需要记住 block 的大小(由 fread()
返回)并将其用于您的写入。
此外,请确保您正在检查 send()
的返回值,因为它可以仅发送您要求的缓冲区的一部分。
关于c - 使用 fread 读取文件不会按预期结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23392435/