C++中如何将结构数组内容写入到文件中?急!

dyfh 2002-05-28 06:20:03
我需要将一些诸如用户信息、用户密码之类的东东以结构数组的形式写入到文件中,在Delphi中很容易实现,但我现在在BCB或VC中就不知如何去做,请问各位大虾,如何将结构数组内容写入到文件中,再读出来,而且不能用记事本打开的方式看到其中的内容
急救,谢了!
...全文
724 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyfh 2002-09-07
  • 打赏
  • 举报
回复
一下子三个月没来,欠了六个问题的分数没给,不好意思,现在都分发了
mygodness 2002-05-29
  • 打赏
  • 举报
回复
你的程序应该不用二进制方式
mygodness 2002-05-29
  • 打赏
  • 举报
回复
刚来,已经解决了吗?
加分的话,可以点击上面的"管理"
dyfh 2002-05-28
  • 打赏
  • 举报
回复
to xdspower
读写结构时只能用二进制文件格式打开,是怎么个意思?我是新手,不明白机制,为什么C++的一位朋友说不能用二进制文件?

这是他的在C++版的回复:
什么意思?你每次向文件中写单位为结构体的大小不就可以了?不要用二进制文件。
dyfh 2002-05-28
  • 打赏
  • 举报
回复
自己找到原因了,是这句:)
读的时候怎么能用"at"呢,笨
xdspower 2002-05-28
  • 打赏
  • 举报
回复
我不知道你的结构是如何定义的,不过我知道在c中读写文件和delphi中是差不多的,你要注意读写结构时只能用二进制文件格式打开,此外因为我不知道你的My_Friends结构是如何定义的,不过你要注意由于数据对齐而产生的一系列问题。
dyfh 2002-05-28
  • 打赏
  • 举报
回复
不行了,又得回来问,按你的方法,我可以正确写入,但读的时候读不出来(Edit里是空值),可能是对于指针之类的东西还不太熟,所以用的不对,可是自己现在头脑发木,看什么都一样,还请务必指出错误所在

void __fastcall TfrmMain::btnWriteClick(TObject *Sender)
{
strcpy(My_Friends[0].Name,Edit1->Text.c_str());
strcpy(My_Friends[0].sex,"男");
strcpy(My_Friends[0].handSet,"139");
strcpy(My_Friends[0].GroupID,str.c_str());

FILE *fp;
if ((fp = fopen("c:\\userinfo.dat", "at")) == NULL)
{
//
}else{
fwrite(&My_Friends[0], sizeof(My_Friends[0]), 1, fp);
fclose(fp);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnReadClick(TObject *Sender)
{
FILE *fp;
if ((fp = fopen("c:\\userinfo.dat", "at")) == NULL)
{
ShowMessage("不能打开文件!");
}else{
int nFileLen,nRecLen,nNum;
nRecLen=sizeof(My_Friend);
nFileLen=filesize(fp);
nNum=nFileLen/nRecLen;
fread(&My_Friends[0], nRecLen, nNum, fp);
char * szTemp;
szTemp=&My_Friends[0].Name[0];
Edit2->Text=szTemp;
Edit3->Text=My_Friends[0].sex;
Edit4->Text=My_Friends[0].handSet;
Edit5->Text=My_Friends[0].GroupID;
fclose(fp);
}
}
dyfh 2002-05-28
  • 打赏
  • 举报
回复
你的意思我大致明白了:)
这里不知为什么怎么也加不上分,明天再加吧:)
mygodness 2002-05-28
  • 打赏
  • 举报
回复
你可以先定义一个结构,上面的函数里,size可以写为sizeof(yourstruct)
想加密,你得另想办法了
mygodness 2002-05-28
  • 打赏
  • 举报
回复
你说的是要加密了,写结构很容易:
1、这里谈到的存取文件的一般方法。而且是常用的一种。

2、首先在包含文件里加入#include <stdio.h>

3、要操作文件,首先要建立文件的指针。如下:FILE *fp,*in,*out;

4、接下来,建立指针指针和文件的联系,主要用fopen,一般的写法是:

if ((in = fopen("\\AUTOEXEC.BAT", "rt")) == NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return 1;
}

有必要说明的是fopen的第一个参数是要打开的文件名,第二个参数是打开方式,可用参数一般有以下几种:r,w,a,r+,w+,a+,很多人知道这些参数的含义,我还是再多哆嗦一下:r 是只读方式,w是写入方式,a是附加方式,也就是写入的数据将加到文件尾部。r+,w+,a+基本和r,w,a意义想似,只是r+,w+均是可读可写。fopen的返回值就是文件指针,如果为NULL,说明文件打开的操作没有成功。特别要说明的是,如果文件里有可能有特殊的符号,包括NULL,那么在打开方式后加上b就行了,如rb,这样文件将以二进制方式打开。

5、下面可以读写文件了:可以用的函数有这么几种:fread(void *ptr, size_t size, size_t n, FILE *stream),这个函数的意思就是将n个大小为size字节的数据,从文件steam里读到缓冲区ptr里,这个ptr可以是数组等。fwrite(const void *ptr, size_t size, size_t n, FILE *stream)这是写数据的

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧