69,371
社区成员
发帖
与我相关
我的任务
分享
fseek(fp, 0, SEEK_END); //在这里你把文件指针指到了文件末尾后面用fread当然读不出来了
:
:
rewind(fp);//fread之前把文件指针重新指回文件头
fread();
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int size = 1;
long n = 0;
int read_size = 0;
char *file_name = "1khz_7s.mp3";//是一个mp3文件
char *buffer = NULL;
FILE *fp;
FILE *stream;
fp = fopen(file_name, "rb");//fopen正确,fp!=NULL
if (NULL == fp)
{
printf("open file:%s falied\n", file_name);
return 1;
}
fseek(fp, 0, SEEK_END);
n = ftell(fp);
printf("n=%d\n", n);//执行到这时,n=113746,确实是文件的大小,我用UE打开文件数过
buffer = (char *)malloc(n+1);//缓冲区分配正确,buffer的地址不为NULL
if (NULL == buffer)
{
printf("malloc buffer falied and the data doesn't convert\n");
return 1;
}
printf("buffer address is:0x%08x\n", buffer);
memset(buffer, 0, n+1);
fseek(fp, 0, SEEK_SET); //将指针重置到文件头……
read_size = fread(buffer, 1, n, fp);//此处,read_size的值总是0,为什么?
if (ferror(fp))//检测文件操作是否有错,返回的是0,即不执行下面的printf语句
{
printf("read file:%s falied\n", file_name);
}
printf("read_size=%d\n", read_size);
printf("buffer[0]=0x%02x,buffer[1]=0x%02x\n", buffer[0], buffer[1]);
stream = fopen("mp3.bin", "wb+");
if (stream == NULL)
{
printf("can't open the file mp3.bin or can't create the file");
return 1;
}
fwrite(buffer, size, n, stream);
free(buffer);
fclose(fp);
fclose(stream);
return 0;
}