关于文件的读写---请来帮我!如何在实现自动读写文件数据
初来公司,我们老大交给我一个小项目想看看我们水平,本想一个星期搞定,可遇到了几个小问题,现在己是第八天!
如何在实现自动读写文件数据。我要把键表中的数据存在一个 .txt文件里,并自动读出。对此.txt 文件的格式有要求。
我用了fprintf()函数很好的控制了其写入格式,可用fscanf()读的时候则数据混乱。
fprintf(stream,"%4d|%4s%12s%19s|%6d\n",d,s,b,c,l,);
读:
fscanf(stream,"%4d|%4s%12s%19s|%6d\n",&d,s,b,c,&l,);
如果写入为
0001|程去|1111122222222|444444444444444444|111111\n
则读出结果为:
d=0001;
d=b=c=“程去”
l=无值
开发工具为vc;
我用了CFile类,但因为水平低,也没有解决。
如何把键表中的数据自动写入数出,并保证文件格式.
请有解决方案的朋友帮忙;
--------新手
ct520520_8@hotmail.com
问题点数:20、回复次数:9Top
1 楼ChChip(ChChip)回复于 2003-08-01 19:40:55 得分 5
你可以把链表中的数据利用序列化的方法来保存,读取也一样,实现不是很困难,参考一下VC方面的书,都有介绍的。Top
2 楼kui(kui)回复于 2003-08-01 22:09:32 得分 5
我在一些程序开发中体会到了用XML的文件格式的好处,并自己做了一个类来读写XML文件,函数都是自己想要的,很方便。但现在你改用XML是来不急了,但以后可以考虑。Top
3 楼BSRONG(戎亚新)回复于 2003-08-02 11:37:29 得分 5
你用fread吧
fscanf(stream,"%4d|%4s%12s%19s|%6d\n",&d,s,b,c,&l,);
fread(&d,sizeof(int),1,stream);
fread(s,4,1,stream);
fread(b,12,1,stream);
fread(c,19,1,stream);
fread(&l,sizeof(int),1,stream);
fscanf(stream,"%4d|%4s%12s%19s|%6d\n",&d,s,b,c,&l,);Top
4 楼nonocast(如果没有如果)回复于 2003-08-02 12:20:04 得分 0
把“|”换成空格试试Top
5 楼farfh(阿远之哈儿)回复于 2003-08-02 12:40:11 得分 0
用struct,格式很好固定啊,保证不会出错Top
6 楼ct520520(我们这里在下雪)回复于 2003-08-02 16:30:53 得分 0
关键是要保证文件内部的格式,请问struct如何定位啊!能否给我一段代码参考啊!
救急.........Top
7 楼DaHunHun(顺其自然吧)回复于 2003-08-02 17:33:57 得分 0
可以用CFile file;file.Write() 写文件, 用Read()读文件,读出来再进行格式转换就可以啦;Top
8 楼farfh(阿远之哈儿)回复于 2003-08-03 16:41:00 得分 5
#include "stdio.h"
#include "stdlib.h"
typedef struct _tests
{
int a,b,c,d;
char s[6];
}tests,*ptests;
void writefile(ptests p)
{
FILE* fp=fopen("test.txt","a+b");
fwrite(p,sizeof(tests),1,fp);
fclose(fp);
}
void readfile(ptests p)
{
FILE* fp=fopen("test.txt","r");
fseek(fp,0,SEEK_SET);
fread(p,sizeof(tests),1,fp);
fclose(fp);
}
void main()
{
tests t={1,2,3,4,"测试"};
writefile(&t);
tests t2;
readfile(&t2);
printf("Read message:%4d,%4d,%4d,%4d,%s",t2.a,t2.b,t2.c,t2.d,t2.s);
getchar();
}Top
9 楼farfh(阿远之哈儿)回复于 2003-08-03 16:43:42 得分 0
在struct中定义你想要排列的格式就成了,将来觉得这个格式不合意,随时可以修改结构体,相对来说,我觉得比较简单一些Top




