如果你确定SDF是数据库文件,那么应该是SQL
SERVER的PDA版本SQLCE的数据文件,这种文件的格式非常复杂,其中包含了数据表、视图、索引、触发器、存储过程,很多信息甚至是加密格式的,这是一个非公开的专有数据格式,必须用指定的软件或者开发商(微软)提供的数据库链接组件来打开。
而CFile,只是以二进制和文本方式打开文件,无法自行处理这些复杂结构。
数据库是不会存储文件的,他只是存储文件的存放地址,比如你想存储一个文件,你可以把文件名,文件大小,文件格式,文件存储的地址(d:/file/fiel.txt)存到数据库表中。当你想获取文件的时候就直接读取文件的存储地址File file=new File("d:/file/fiel.txt"),这样就能存储数据文件了
typedef struct informationTable{
char name[20]
char sex
char birth[11] //日期需要11长度
informationTable *next
}INFO
void CReadFiletoLinkDlg::OnButton1() //在MFC中写的,你自己定义自己的类吧。哈哈
{
// TODO: Add your control notification handler code here
INFO *p,*head,*r
p=(INFO*)malloc(sizeof(INFO))
head=p
p->next=NULL
r=p
CFile mFile(_T("D:\\data.txt"),CFile::modeRead)
if(mFile.GetLength()<2) return
char *sRead = new char[mFile.GetLength()]
mFile.Read(sRead,mFile.GetLength())
sRead[mFile.GetLength()]='\0'
char tmp[65535]={0}
int i=0
int j=0
while(i<mFile.GetLength()+1){
if(sRead[i]=='\n'||sRead[i]=='\0'){
// AfxMessageBox(&sRead[j])
strncpy(tmp,&sRead[j],i-j)
j=i
char name[100]={0}
char sex[2]
char birthday[100]={0}
sscanf(tmp,"%s %s %s",name,sex,birthday)
// sprintf(tmp,"%s %s %s",name,sex,birthday)
// AfxMessageBox(tmp)
// AfxMessageBox(name)
// AfxMessageBox(sex)
// AfxMessageBox(birthday)
p=(INFO*)malloc(sizeof(INFO))
strcpy(p->name,name)
p->sex=sex[0]
strcpy(p->birth,birthday)
//后插法
p->next=NULL
r->next=p
r=r->next
}
i++
}
mFile.Close()
//访问链表,测试用
INFO *s
s=head->next
while(s!=NULL){
char tmp[65535]={0}
sprintf(tmp,"%s %c %s",s->name,s->sex,s->birth)
AfxMessageBox(tmp)
s=s->next
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)