阅读:1586回复:9
高分请教读取文件数据的问题!急!!!!
因为板子的要求,我每次只能从文件中读取16K的数据写到板子上去,如果我要从文件中读取的数据远大于16K,我只能多次调用从文件中读取数据的函数(PCI9054_WriteToRam1 ()),当我调用一次读取数据的函数读取一帧数据后,第二次调用时怎样使指针指到文件上第二帧数据的起始位?
下面是我的代码,PCI9054_ReadWriteBlock()是写数据到板子上的函数。 void PCI9054_WriteToRam1 (PCI9054_HANDLE hPCI9054, PCI9054_ADDR addrSpace, DWORD dwOffset, WORD data) { FILE *fp; short a[16383]; UINT i; if((fp=fopen("F:\data\adsin.dat","r"))==NULL) { printf("cannot open filen"); exit(0); } for(i=0;i<=16382;i++) { //while(!feof(fp)) fscanf(fp, "%d", &a); } fclose(fp); dwOffset=2; for(i=0; i<=16382;i++) { data=a; PCI9054_ReadWriteBlock(hPCI9054, addrSpace, dwOffset, FALSE, &data, sizeof(WORD), PCI9054_MODE_WORD); dwOffset+=2; } } |
|
沙发#
发布于:2004-09-03 13:52
use fread instead
|
|
|
板凳#
发布于:2004-09-03 15:25
真的可以吗?帮我把那段代码改改吧,一定给分!多谢多谢!
|
|
地板#
发布于:2004-09-03 17:24
void PCI9054_WriteToRam1 (PCI9054_HANDLE hPCI9054, PCI9054_ADDR addrSpace, DWORD dwOffset, WORD data)
{ FILE *fp; short a[16383]; UINT i; if((fp=fopen("F:dataadsin.dat","r"))==NULL) { printf("cannot open filen"); exit(0); } fread(a, sizeof(short), 16383, fp); fclose(fp); dwOffset=2; for(i=0; i<=16382;i++) { data=a; PCI9054_ReadWriteBlock(hPCI9054, addrSpace, dwOffset, FALSE, &data, sizeof(WORD), PCI9054_MODE_WORD); dwOffset+=2; } } |
|
|
地下室#
发布于:2004-09-04 14:04
wowocock,你好!按照你改的那样好像还是在读第一帧的数据,再帮我想想办法吧,先谢谢啦!
|
|
5楼#
发布于:2004-09-05 08:51
void PCI9054_WriteToRam1 (PCI9054_HANDLE hPCI9054, PCI9054_ADDR addrSpace, DWORD dwOffset, WORD data)
{ FILE *fp; short a[16383]; UINT i; if((fp=fopen("F:dataadsin.dat","r"))==NULL) { printf("cannot open filen"); exit(0); } for(int i = 0; i < MAX_READS; i ++) //循环读帧 { fread(a, sizeof(WORD), 16383, fp); fseek( a, i * 16383, SEEK_SET); //移动文件指针指向下一帧的开始位置 fclose(fp); dwOffset=2; for(i=0; i<=16382;i++) { data=a; PCI9054_ReadWriteBlock(hPCI9054, addrSpace, dwOffset, FALSE, &data, sizeof(WORD), PCI9054_MODE_WORD); dwOffset+=2; } } } fread是不可以移动指针,上面有位兄弟好象说错了,以下是MSDN上的说法:size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); Parameters buffer Storage location for data. size Item size in bytes. count Maximum number of items to be read. stream Pointer to FILE structure. |
|
6楼#
发布于:2004-09-06 15:46
虽然问题已经解决,但还是要谢谢楼上两位的回答,我是用ftell()和fseek()这两个函数来定位的,光用(fseek( a, i * 16383, SEEK_SET); //移动文件指针指向下一帧的开始位置)会出现定位不准的现象,用下面这样就可以了。
fseek(fp,pos,0); for(j=0;j<=16382;j++) { fscanf(fp, "%d", &a[j]); } pos=ftell(fp); |
|
7楼#
发布于:2004-09-09 22:59
我也向知道
|
|
8楼#
发布于:2004-09-09 23:00
怎么没人回答
|
|
9楼#
发布于:2004-09-10 10:26
想知道什么?
|
|