MFC 配合编辑框获取TXT文件某一行或修改某一行

5 篇文章 0 订阅
3 篇文章 0 订阅
  1. 环境:vs2019,Unicode,MFC,C++

  2. 代码段:
    #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;
    }
  3. 说明:该代码读取AppConfig.txt,并配合编辑框使用,第一个参数为AppConfig.txt中的关键词;第二个参数为对应的编辑框ID,如果编辑框有值,则将该值替换到AppConfig.txt中关键词所在的值,若编辑框没有值,则将AppConfig.txt读取到值显示到编辑框中;第三个参数是获取关键词所在行的内容(不包括关键词本身)。

    AppConfig.txt内容如下,每一行空格前是关键词,空格后是对应的值。

        

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值