易码技术论坛

 找回密码
 加入易码
搜索
查看: 298893|回复: 15

[求助]如何建立数据文件!

[复制链接]
发表于 2005-4-19 21:09:00 | 显示全部楼层
呼唤老F,老A..................
及各位高手..............
发表于 2005-4-19 21:24:00 | 显示全部楼层
原型: int fread(int pt,int size,int n,char fp);
功能: 读文件
说明: 从句柄为fp的文件中读取n个字节,存到pt所指向的内存区
      返回所读的字节数,如遇文件结束或出错返回0
      注意:fread和fwrite的参数size会被忽略,实际读写的字节数是参数n。之所以保留size是为了与c兼容。建议size值取1。
   
举例:

char s[]="www.lava.com";

void main()
{
    char fp;
    char t[20];

    if ((fp=fopen("/LavaData/tmp.dat","w+"))==0)
        printf("创建文件失败!");
    else {
        printf("创建文件成功!");
        fwrite(s,1,strlen(s)+1,fp);
        rewind(fp);
        fread(t,1,strlen(s)+1,fp);
        printf("\n%s",t);
        fclose(fp);
    }
    getchar();
}


 
  fwrite
原型: int fwrite(int pt,int size,int n,char fp);
功能: 写文件
说明: 把pt所指向的n个字节输出到句柄为fp的文件中
      返回写到fp文件中的字节数
      注意:fread和fwrite的参数size会被忽略,实际读写的字节数是参数n。之所以保留size是为了与c兼容。建议size值取1。
   
举例:

char s[]="www.lava.com";

void main()
{
    char fp;
    char t[20];

    if ((fp=fopen("/LavaData/tmp.dat","w+"))==0)
        printf("创建文件失败!");
    else {
        printf("创建文件成功!");
        fwrite(s,1,strlen(s)+1,fp);
        rewind(fp);
        fread(t,1,strlen(s)+1,fp);
        printf("\n%s",t);
        fclose(fp);
    }
    getchar();
}



fseek
原型: long fseek(char fp,long offset,char base);
功能: 文件指针定位
说明: 将句柄为fp的文件的位置指针移到以base所指出的位置为基准,以offset为位移量的位置
      返回当前位置。若出错,返回-1。
 
 
举例:

char s[]="www.lava.com";

void main()
{
    char fp;
    char t[20];

    if ((fp=fopen("/LavaData/tmp.dat","w+"))==0)
        printf("创建文件失败!");
    else {
        printf("创建文件成功!");
        fwrite(s,1,strlen(s)+1,fp);
        fseek(fp,4,0);
        fread(t,1,strlen(s)+1,fp);
        printf("\n%s",t);
        fclose(fp);
    }
    getchar();
}




lava函数手册里不是有这个?????

参考一下格式就行


 楼主| 发表于 2005-4-20 18:03:00 | 显示全部楼层
我知道有这个
我的意思是保存图片的数据文件
难道一屏幕好几百个数据用循环一个一个输入?
发表于 2005-4-20 21:20:00 | 显示全部楼层
fwrite(example,1,写入的字节数,char fp);
是这个???

发表于 2005-4-21 17:24:00 | 显示全部楼层
loglave的已经给楼主讲的很明白了啊-_-
可以一次写入多字节。
 楼主| 发表于 2005-4-22 13:58:00 | 显示全部楼层
谢谢了~~~~~
发表于 2005-4-23 10:21:00 | 显示全部楼层
       [em04]问题:是怎么把.bmp的文件格式(或其他的)转为.dat格式的。
       .dat的格式是怎样的。
[em06]
    期待回复。
发表于 2005-6-21 19:41:00 | 显示全部楼层
你好
以上代码有些不清楚
例如
我这样写
void main()
{
char fp;
char magic[];
fp=fopen("LavaData\放荡的术士.dat","r");
fread(magic,1,4000,fp);
WriteBlock(0,0,100,80,1,magic);
getchar();
}
运行后
错误的读写地址0-40f
为什么
谁能帮我解答
谢谢
发表于 2005-6-21 23:21:00 | 显示全部楼层
也许文件没有4000字节,一个全屏的图片是1600字节~~
发表于 2005-6-22 08:57:00 | 显示全部楼层
是16色灰度的
发表于 2005-6-22 09:27:00 | 显示全部楼层
你好
这样写代码
// 宽=100,高=80
char card_lust[]={
0x79,0x99,0x97,0x65,0x55,0x66,0x66,0x65,0x66,0x65,0x55,0x56,0x88,0x76,0x66,0x77,0x88,0x77,0x99,0x99,0xaa};
//具体的数据略
void main()
{
char fp;
fp=fopen("LavaData\testfd.dat","w+");
fwrite(card_lust,1,4000,fp);
fclose(fp);
getchar();
}
运行之后
lavadata 内没有testfd.dat啊
为什么
谢谢
发表于 2005-6-22 17:48:00 | 显示全部楼层
还有一个问题
比如
我想在一个dat文件中放入多个图片的dat文件
然后用fread读出来
用writeblock显示
但我把几个dat文件经复制,粘贴放到一起,总的字节数不对
用以下代码
void main()
{
char fp;
char manapic[5][630];
char logo[3225];
int i;
fp=fopen("/LavaData/Magic_.dat","r");
fread(logo,1,3225,fp);
SetGraphMode(4);
WriteBlock(0,0,150,43,1,logo);
Refresh();
getchar();
for(i=1;i<=5;i++)
{
fread(manapic,1,350,fp);
WriteBlock(0,0,35,35,1,manapic);
Refresh();
getchar();
}
fclose(fp);
}
能显示图片
但显示的图片不对
发表于 2005-6-22 17:54:00 | 显示全部楼层
这是错误的截图

发表于 2005-6-22 18:39:00 | 显示全部楼层
我用以下代码把几个dat文件写成一个dat文件
char mana_red[]={0x0,0x0,0x0,0x0,0x0, //具体数据略
char mana_blue[]={0x0,0x0,0x0,0x0,0x0,0x1,
char mana_green[]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
char mana_black[]={0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,
char mana_white[]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
char logo[]={0xef,0xfe,0xef,0xff,0xee,0xdf,
void main()
{
char fp;
int i;
fp=fopen("/LavaData/Magic_.dat","w+");
fwrite(logo,1,3225,fp);
fwrite(mana_red,1,350,fp);
fwrite(mana_blue,1,350,fp);
fwrite(mana_green,1,350,fp);
fwrite(mana_black,1,350,fp);
fwrite(mana_white,1,350,fp);
fclose(fp);
}
一切ok(p.s.但有一个小问题:这样写好象不行:char picmana[1][]={0x12,0x23};char picmana[2][]={0x12,0x23};char picmana[3][]={0x12,0x23};
为什么
然后用以下代码读dat文件
void main()
{
char fp;
char manapic[5][630];
char logo[3225];
int i;
fp=fopen("/LavaData/Magic_.dat","r");
fread(logo,1,3225,fp);
SetGraphMode(4);
WriteBlock(0,0,150,43,1,logo);
Refresh();
getchar();
for(i=1;i<=5;i++)
{
fread(manapic,1,350,fp);
WriteBlock(0,0,35,35,1,manapic);
Refresh();
getchar();
}
fclose(fp);
}
第一张图片正常
但后面的都有问题
为什么
p.s.以前的问题已解决,谢谢大家
发表于 2005-6-22 18:43:00 | 显示全部楼层
这时截图



p.s.不好意思,家里电脑出了点问题,发不了新帖子,只好跟着别人的帖子发了
 楼主| 发表于 2005-4-19 12:53:47 | 显示全部楼层 |阅读模式
请问如何把数据文件用FOPEN命令存入一个.DAT文件里面

例如:

char example[]={0x21,0x22,0x23,0x24};        //数组里面有很多的数据

怎么样用FOPEN把example里面的数据存在tmp.dat里面???

并且如何读出这些数据???

非常感谢
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-25 00:12 , Processed in 0.012371 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表