VC++ 保存 MFC 列表控件(IDC_LST_Table)中的数据到 TXT 文件

来源:互联网 发布:淘宝卖家登陆页面 编辑:程序博客网 时间:2024/05/21 21:50

最简单的例子是:

写入到文件:

FILE * fp;
fp = fopen("c:\\aaa.txt", "a+");
fwrite("aaaaa", strlen("aaaaa"), 1, fp);

fclose(fp);

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

现在要把以下四项写入txt文件

int m_iRockNum ;
int *m_Perimeter ;//周长  
int *m_Area ;//面积  
double *m_LongDiameter;//长径 

按照上面的样子,直接写入是不行的:

fwrite(m_Perimeter[i], strlen(m_Perimeter[i]), 1, fp);

error C2664: 'strlen' : cannot convert parameter 1 from 'int' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

换成sizeof,可以写入了,不过打卡对应的aaa.txt文件,一串乱码

fwrite(&m_Perimeter[i], sizeof(m_Perimeter[i]), 1, fp);

fwrite用2进制写入文本(wb模式),所以你看到的是乱码  


改用:fprintf是C/C++中的一个格式化写—库函数,位于头文件<stdio.h>中,其作用是格式化输出到一个流/文件中;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函数根据指定的格式(format)向输出流(stream)写入数据(argument)。


fprintf( )会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\0')为止。

fp = fopen("D:\\aaa.txt", "ab+");

for (i = 1; i < m_iRockNum; i ++)
{
fprintf(fp,"%d%c",i,a);

fprintf(fp,"%d%c",m_Perimeter[i],a);
fprintf(fp,"%d%c",m_Area[i],a);
fprintf(fp,"%.2f",m_LongDiameter[i]);
fprintf(fp,"\r\n");

}

fclose(fp);

另外是换行的细节,用‘\n’写入文件,没有换行,‘\r\n’才可以


修改后,可以正常写入,打开txt文件也是正常显示

左图为MFC 的列表控件(IDC_LST_Table),右图是写入的aaa.txt的显示


0 0