在二进制模式下打开这两个文件时,无法完全复制其他文件中的文件

时间:2013-06-17 09:23:49

标签: c file filestream fread printf

我正在尝试从一个文件复制到另一个以二进制模式打开的文件

这里:

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);
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

您正在使用fprintf()来写入数据。 %s表示字符串。我猜你在数据中有一个零字节来终止字符串。

我会改用fwrite()。 (见tutorial)。

答案 1 :(得分:1)

使用fwrite代替fprintf

fwrite(m_RTPPacketBuf, chunk, 1,outfile );

请考虑以下建议,

  1. 在循环外移动result和其他声明
  2. chunk可以用常量/宏替换,如果不变,显然可以放在外部循环。
  3. malloc可以避免,因为要分配的内存不会改变,而是可以使用固定大小的数组。
  4. 检查freadfwrite的返回值。