+ -
当前位置:首页 → 问答吧 → [紧急]文件读写问题,谢谢!!

[紧急]文件读写问题,谢谢!!

时间:2011-12-08

来源:互联网

用C读取文件
in=fopen(fileName,"rb");//file里存储的是一个有一个的比特值,取值范围为0-255
out=fopen("test.yuv","wb");
int temp;
while(!feof(in))
{
  temp=fgetc(in);
  fputc((unsigned char)temp,out);
}

问题是:
为什么生成的文件test.yuv中会漏掉一些值呢?

作者: Iamtheodore   发布时间: 2011-12-08

漏掉哪些值?
举个例子。

作者: proorck6   发布时间: 2011-12-08

你的in文件里面是什么?
得到的文件里面又是什么?
发上来看看

作者: shimachao   发布时间: 2011-12-08

0D值,也就是回车漏掉了

作者: Iamtheodore   发布时间: 2011-12-08

不知还有没其他的

作者: Iamtheodore   发布时间: 2011-12-08

你的in文件中的内容怎写进去的?

作者: shimachao   发布时间: 2011-12-08

那是原始文件,yuv不知大家了解吗,类似RGB值

作者: Iamtheodore   发布时间: 2011-12-08

或者大家有没有设么好的这种针对字节数值的文件读写方式呢?C++也可以

作者: Iamtheodore   发布时间: 2011-12-08

就你上面的程序来说,你确定是用"rb"读,"wb"写,不可能会漏掉字符的
如果没有b,到是可以漏掉回车等特殊字符的
查下程序的其它部分,如内存/下标溢出可能会导致不可预见的结果的

作者: keiy   发布时间: 2011-12-08

我调试程序的时候,假设第一个字节就是存储的0D的话,根本读不出来

作者: Iamtheodore   发布时间: 2011-12-08

从下一个字符读起

作者: Iamtheodore   发布时间: 2011-12-08

我觉得可能跟0D0A有关系

作者: Iamtheodore   发布时间: 2011-12-08

进来围观学习的……

作者: diyigehaoren   发布时间: 2011-12-08

应该不是这段程序的问题,你程序的唯一问题是最终的test.yuv文件会比原文件多一字节0xFF
while(!feof(in)) //如果已到EOF前一个,循环有效
{
  temp=fgetc(in); //得到EOF(-1)
  fputc((unsigned char)temp,out); //写入文件 0xFF
}
你可写一测试程序试试
C/C++ code

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{
FILE *in=fopen("t.exe","rb");//file里存储的是一个有一个的比特值,取值范围为0-255
FILE *out=fopen("t1.exe","wb");
int temp;
while((temp=fgetc(in))!=EOF)
   fputc((unsigned char)temp,out);

}


将文件名设为t.cpp,将文件编译成t.exe然后运行.会得到t1.exe
然后用dos的fc命令比较两个文件,应该找不到差别
所以检查程序的其它部分,看看是否是上下文件引起的程序错误

作者: keiy   发布时间: 2011-12-08

末尾的确是多FF,但0D无法读取的问题是存在的

作者: Iamtheodore   发布时间: 2011-12-08

热门下载

更多