fopen/fwrite写文件例子

对于fopen和open的区别可参考https://www.cnblogs.com/hnrainll/archive/2011/09/16/2178706.html

                                                      https://blog.csdn.net/kaiandshan/article/details/43226529

                                                      https://www.cnblogs.com/NickyYe/p/5497659.html

当遇到MFC工程里要数据保存到本地时,如果以前没接触MFC,想使用fopen/fwrite,而不想去查一大堆Windows API的东西,头都要大。牵扯到CString和string以及char*的转换,烦。

看看:FILE * fopen(const char * path, const char * mode); fopen的参数类型是char*,但你能获取的路径信息只能是CString

类型转换可参考:https://www.cnblogs.com/bluestorm/p/3168720.html

                                https://www.cnblogs.com/maowang1991/p/3570328.html

就这样转来转去,严重影响进度。

下面先来个小例子

void CStrTestDlg::OnOK() 
{
	// TODO: Add extra validation here
	int j = 100;
	while(1)
	{
		if(j > 115) j = 100;
		int i;
		FILE *fp = NULL;
		CString str;
		str.Format("%d",j++); 
		CString path =  "C:\\datatemp\\"+ str + ".txt";//路径
		char* pFileName = path.GetBuffer(path.GetLength()+1);
		fp = fopen(pFileName, "w+");
		if (NULL != fp)
		{
			for (i = 0; i < 15; i++)
			{
			   char s[32] = {0};
			   sprintf(s,"%f",(double)i + j);
			   strcat(s, "\r\n");
			  fwrite(s, strlen(s),1,fp);
			}
		}
	 if(fp != NULL)
     fclose(fp);
	}
	CDialog::OnOK();
}

这是一个模拟要保存实时数据的例子,也就是说每次都更新最新的数据(覆盖),本来路径信息和数据可以通过参数传进来,这里只是用一个循环模拟一下。

说明:

1.建了个MFC工程,基于对话框的,点“确定”按钮即可进入OnOK函数(响应函数);

2.假设path是传进来的路径(每次都不一样),是CString类型,那么在fopen前需要转一下,

          char* pFileName = path.GetBuffer(path.GetLength()+1);

这里使用这种方法。其他方法可参考上面的链接。

3.fopen第二个参数"w+"表示可读可写,如果文件存在则清除,不存在创建。

 对于对文件操作的模式选择可以百度

结果看看文件保存情况:

最后说明一点:fwrite,如果不将数据转为字符串,则在文件里可能为乱码。原因是文本以字符显示,对应的ASCII码如下: