我正在尝试从一个文件复制到另一个以二进制模式打开的文件
这里:
pdata是指从中获取输入的文件的文件指针
outfile是指向要写入数据的文件的文件指针。
我的输入文件大约是400mb,程序执行结束后输出文件只包含80mb。为什么完整文件没有复制?
我知道当我尝试计算没有数据包时,我会留下一些字节。
int num_RTP_packets=file_Size/(TS_PKT_SIZE * MAX_TS_PKTS); //Total no of Packets
for(int i=0;i<num_RTP_packets;i++)
{
long result;
uint8* m_RTPPacketBuf =(uint8*) malloc(TS_PKT_SIZE * MAX_TS_PKTS);
int chunk=TS_PKT_SIZE* MAX_TS_PKTS;
result=fread (m_RTPPacketBuf,chunk,1,pData);
fprintf(out_file,"%s",m_RTPPacketBuf);
free(m_RTPPacketBuf);
}
提前致谢。
答案 0 :(得分:1)
您正在使用fprintf()
来写入数据。 %s
表示字符串。我猜你在数据中有一个零字节来终止字符串。
我会改用fwrite()
。 (见tutorial)。
答案 1 :(得分:1)
使用fwrite
代替fprintf
。
fwrite(m_RTPPacketBuf, chunk, 1,outfile );
请考虑以下建议,
result
和其他声明chunk
可以用常量/宏替换,如果不变,显然可以放在外部循环。malloc
可以避免,因为要分配的内存不会改变,而是可以使用固定大小的数组。fread
和fwrite
的返回值。