我正在编写一个程序,用于在不同客户端之间传输文件,我有一点问题。
我找到了一个不起作用的例子。
我有一个pdf文件,我正在使用fread
阅读它:
bytes = fread(chunk, 1, BUFLEN - 1, from_file);
经过一些调试后我发现这行代码没有读取BUFLEN - 1
个字节(哦顺便说一下,文件很大,我只迭代一次才能获得第一个BUFLEN - 1
字节,因此该文件的字节数超过BUFLEN - 1
。 fread
的返回值实际上是BUFLEN - 1
,但在将此块写入文件后,它的大小要小得多。
我认为fread
在遇到某些事情时会停止阅读,但我无法找到答案。
我用"rb"
打开了文件,所以这也不是问题所在。此外,我的程序似乎可以很好地读取任何大小的文本文件,这就是我认为在查找不同类型的字节时存在一些问题的原因。
编辑:我通过
发送块 send(socksv, chunk, strlen(chunk), 0);
收到:
n = recv(i, chunk, BUFLEN - 1, 0);
之后我就这样写了
fwrite(chunk, 1, strlen(chunk), copy_file);
答案 0 :(得分:2)
问题几乎可以肯定是strlen()
的使用,因为当它看到一个零字节时,它将停止写入(无论是套接字还是文件),几乎肯定会在PDF内部。您需要记住块的大小(由fread()
返回)并将其用于写入。
此外,请确保您正在检查send()
的返回值,因为 只能发送您要求的部分缓冲区。
答案 1 :(得分:0)
如果文件处于二进制模式且fread()
表示它读取BUFLEN-1
个字节,则确实如此。您说您正在将读取数据写入另一个文件,因此问题必须与您的写作有关,而不是您的阅读。但是,您没有显示该代码。