-
环境:vs2019,Unicode,MFC,C++
- 代码段:
#pragma once #include <afxwin.h> #include <iostream> #include <cstring> #include <string> #include <fstream> #include <direct.h> bool GetTxtValue(_In_ string sKey, _In_ int iDlgId, _Out_ string *strTxtValue) { USES_CONVERSION; char cWorkPath[MAX_PATH]; // 工作目录 char cLineBuffer[MAX_PATH]; string sAppConfig; // AppConfig.txt 路径 string sLineBuffer; string sWriteBuffer; CString csPath; int iPtr = 0; BOOL bFindKey = FALSE; ifstream ifAppConfig; ofstream ofAppConfig; getcwd(cWorkPath, MAX_PATH); // 获取当前工作路径 sAppConfig = cWorkPath; sAppConfig = sAppConfig + "\\AppConfig.txt"; GetDlgItemText(iDlgId, csPath); if (csPath.IsEmpty()) // 如果编辑框为空 { ifAppConfig.open(sAppConfig.c_str(), ios::in | ios::binary); // 打开txt if (ifAppConfig.is_open()) { while (ifAppConfig.getline(cLineBuffer, MAX_PATH)) // 获取 sKey 所在行 { sLineBuffer = cLineBuffer; // char* 转 string if (string::npos != sLineBuffer.find(sKey)) // 找到关键词 { iPtr = sLineBuffer.find(sKey); // 获取 sKey 所在的下标 *strTxtValue = sLineBuffer.substr(iPtr + sKey.size() + 1, sLineBuffer.size()); // 获取路径 bFindKey = TRUE; } } SetDlgItemText(iDlgId, A2T((*strTxtValue).c_str())); //UpdateWindow(); // 在线程中调用 updatedata,要向父对话框发送自定义消息 自定义:WM_UPDATEDATA //SendMessage(WM_UPDATEDATA, FALSE); } else { // 没有打开文件 MessageBox(_T("打开文件失败,请检查路径")); return false; } ifAppConfig.close(); } else // 如果路径编辑框不为空,将编辑框的值替换 AppConfig.txt 里面的值 { ifAppConfig.open(sAppConfig.c_str(), ios::in | ios::binary); *strTxtValue = W2A(csPath); if (ifAppConfig.is_open()) { while (ifAppConfig.getline(cLineBuffer, MAX_PATH)) { sLineBuffer = cLineBuffer; if (-1 != sLineBuffer.find(sKey)) // 找到对应的关键词 sWriteBuffer = sWriteBuffer + sKey + " " + *strTxtValue + "\n"; // 将编辑框的值替换到关键字对应的行的值 else sWriteBuffer = sWriteBuffer + sLineBuffer + "\n"; } SetDlgItemText(IDC_EDIT_MSG, _T("替换文件路径成功")); } else { // 没有打开文件 MessageBox(_T("打开文件失败,请检查路径")); return false; } ifAppConfig.close(); ofAppConfig.open(sAppConfig.c_str(), ios::in | ios::binary); // 打开 AppConfig.txt ofAppConfig << sWriteBuffer; ofAppConfig.flush(); ofAppConfig.close(); } return true; }
- 说明:该代码读取AppConfig.txt,并配合编辑框使用,第一个参数为AppConfig.txt中的关键词;第二个参数为对应的编辑框ID,如果编辑框有值,则将该值替换到AppConfig.txt中关键词所在的值,若编辑框没有值,则将AppConfig.txt读取到值显示到编辑框中;第三个参数是获取关键词所在行的内容(不包括关键词本身)。
AppConfig.txt内容如下,每一行空格前是关键词,空格后是对应的值。