int CFileWandR::ReadDate(int Date_NUM,char * usename,char * password,char * LanIP,int & LanPort,char * WanIP,int & WanPort)
{
FILE *fp;
int nTime;
int Flag;
TUTK_Info File_Date[1000];
if((fp=fopen("TutkFlie.txt","r+"))==NULL)
{
Flag=0; //如果文件不存在返回0;
}
rewind(fp); // 文件首
for (nTime=0;nTime<1000;nTime++)
{
fscanf(fp,"%s%s%s%d%s%d",File_Date[nTime].usename,&File_Date[nTime].password,&File_Date[nTime].LanIP,File_Date[nTime].LanPort,File_Date[nTime].WanIP,File_Date[nTime].WanPort);
}
strcpy(usename,File_Date[Date_NUM].usename);
strcpy(password,File_Date[Date_NUM].password);
strcpy(LanIP,File_Date[Date_NUM].LanIP);
LanPort=File_Date[Date_NUM].LanPort;
strcpy(WanIP,File_Date[Date_NUM].WanIP);
WanPort=File_Date[Date_NUM].WanPort;
Flag=1;
fclose(fp);
return Flag;
}
int CFileWandR::WriteDate(int Date_NUM,const char * usename,const char * password,const char * LanIP, int LanPort,const char * WanIP,int WanPort)
{
FILE *fp;//文件
int index;
if((fp=fopen("TutkFlie.txt","a+"))==NULL)
{
index=0; //如果文件不存在返回0;
}
TUTK_Info File_Date[1000]; //1000组数据
strcpy(File_Date[Date_NUM].usename,usename);
strcpy(File_Date[Date_NUM].password, password);
strcpy(File_Date[Date_NUM].LanIP, LanIP);
File_Date[Date_NUM].LanPort= LanPort;
strcpy(File_Date[Date_NUM].WanIP, WanIP);
File_Date[Date_NUM].WanPort=WanPort;
fprintf(fp,"%s%s%s%d%s%d\n",File_Date[Date_NUM].usename,File_Date[Date_NUM].password,File_Date[Date_NUM].LanIP,File_Date[Date_NUM].LanPort,File_Date[Date_NUM].WanIP,File_Date[Date_NUM].WanPort);
index=1;
fclose(fp);
return index;
}
7 个解决方案
#1
fprintf,fscanf 都会以文本方式来读写文件,以文本方式读取会被操作系统的编码影响。最好改成以二进制方式来序列化。
例如写入的时候
fwrite(fp, buff, 10 bytes)
fwrite(fp, buff, 2 bytes)
fwrite(fp, buff, 3 bytes)
...
读取的时候
fread(fp, buff, 10 bytes)
fread(fp, buff, 2 bytes)
fread(fp, buff, 3 bytes)
例如写入的时候
fwrite(fp, buff, 10 bytes)
fwrite(fp, buff, 2 bytes)
fwrite(fp, buff, 3 bytes)
...
读取的时候
fread(fp, buff, 10 bytes)
fread(fp, buff, 2 bytes)
fread(fp, buff, 3 bytes)
#2
fprintf(fp,"%s%s%s%d%s%d\n"
%s中不加个空格(话又说回来了,加个空格的话,如果数据本身有空格怎么办,最好的解决办法还是读写进制数据),读的时候怎么分段?
建议用二进制读写数据,速度快,文件小,操作还简单。一条fwrite加一条fread就完成你所有功能了。
%s中不加个空格(话又说回来了,加个空格的话,如果数据本身有空格怎么办,最好的解决办法还是读写进制数据),读的时候怎么分段?
建议用二进制读写数据,速度快,文件小,操作还简单。一条fwrite加一条fread就完成你所有功能了。
#3
会报内存错误,唉
#4
可以贴点代码出来吗?
#5
说这么清楚还要代码?
fp=fopen("TutkFlie.txt","rb"); //"w+b" 写
TUTK_Info info;
//读:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
//写:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
fp=fopen("TutkFlie.txt","rb"); //"w+b" 写
TUTK_Info info;
//读:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
//写:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
#6
在这里放置你的代码
这样,看起来代码舒服一些,更容易看懂,问题,楼上的都说的差不多了
#7
在[/code]前面,
[code=C/C++]后面
#1
fprintf,fscanf 都会以文本方式来读写文件,以文本方式读取会被操作系统的编码影响。最好改成以二进制方式来序列化。
例如写入的时候
fwrite(fp, buff, 10 bytes)
fwrite(fp, buff, 2 bytes)
fwrite(fp, buff, 3 bytes)
...
读取的时候
fread(fp, buff, 10 bytes)
fread(fp, buff, 2 bytes)
fread(fp, buff, 3 bytes)
例如写入的时候
fwrite(fp, buff, 10 bytes)
fwrite(fp, buff, 2 bytes)
fwrite(fp, buff, 3 bytes)
...
读取的时候
fread(fp, buff, 10 bytes)
fread(fp, buff, 2 bytes)
fread(fp, buff, 3 bytes)
#2
fprintf(fp,"%s%s%s%d%s%d\n"
%s中不加个空格(话又说回来了,加个空格的话,如果数据本身有空格怎么办,最好的解决办法还是读写进制数据),读的时候怎么分段?
建议用二进制读写数据,速度快,文件小,操作还简单。一条fwrite加一条fread就完成你所有功能了。
%s中不加个空格(话又说回来了,加个空格的话,如果数据本身有空格怎么办,最好的解决办法还是读写进制数据),读的时候怎么分段?
建议用二进制读写数据,速度快,文件小,操作还简单。一条fwrite加一条fread就完成你所有功能了。
#3
会报内存错误,唉
#4
可以贴点代码出来吗?
#5
说这么清楚还要代码?
fp=fopen("TutkFlie.txt","rb"); //"w+b" 写
TUTK_Info info;
//读:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
//写:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
fp=fopen("TutkFlie.txt","rb"); //"w+b" 写
TUTK_Info info;
//读:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
//写:
fwrite(&info, 1, sizeof(TUTK_Info), fp);
#6
在这里放置你的代码
这样,看起来代码舒服一些,更容易看懂,问题,楼上的都说的差不多了
#7
在[/code]前面,
[code=C/C++]后面