VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 329|回复: 2

用vc如何修改文件中的字符串

[复制链接]
12_avatar_middle
最佳答案
0 
donate_vip 发表于 2019-7-1 22:19:20 | 显示全部楼层 |阅读模式
本帖最后由 starfish_hjg 于 2019-7-4 15:03 编辑

我想修改系统中的tnsname.ora文件,能否自动搜索出来这个文件,然后修改文件中指定的字符串,例如文件内容如下:
test1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = test1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test1)
    )
  )

test2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = test2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test2)
    )
  )
比如我想找到test2,然后修改其中的HOST = test2,修改为HOST =192.168.1.1,SERVICE_NAME = test2修改为SERVICE_NAME = orcl,请问如何实现

无标题.png




上一篇:关于引用,不是说不可改变吗?这个怎么理解?
下一篇:程序源码编译全部通过,但是link的时候一直提示报错缺少文件
12_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-7-4 15:00:06 | 显示全部楼层
本帖最后由 starfish_hjg 于 2019-7-4 15:05 编辑

自己试着实现了下,请老师和广大网友批评指正
// SwitchTNSDlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "SwitchTNS.h"
#include "SwitchTNSDlg.h"
#include "afxdialogex.h"
#include <locale.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
        CAboutDlg();

        // 对话框数据
#ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_ABOUTBOX };
#endif

protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CSwitchTNSDlg 对话框



CSwitchTNSDlg::CSwitchTNSDlg(CWnd* pParent /*=nullptr*/)
        : CDialog(IDD_SWITCHTNS_DIALOG, pParent)
{
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSwitchTNSDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //DDX_Control(pDX, IDC_EDIT, m_edit);
        DDX_Control(pDX, IDC_EDIT, m_edit);
}

BEGIN_MESSAGE_MAP(CSwitchTNSDlg, CDialog)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, &CSwitchTNSDlg::OnBnClickedButton1)
        ON_BN_CLICKED(IDC_BUTTON2, &CSwitchTNSDlg::OnBnClickedButton2)
        ON_BN_CLICKED(IDC_BUTTON3, &CSwitchTNSDlg::OnBnClickedButton3)
        ON_WM_SETCURSOR()
        ON_BN_CLICKED(IDC_BUTTON4, &CSwitchTNSDlg::OnBnClickedButton4)
END_MESSAGE_MAP()


// CSwitchTNSDlg 消息处理程序

CString strPath;

BOOL CSwitchTNSDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // 将“关于...”菜单项添加到系统菜单中。

        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != nullptr)
        {
                BOOL bNameValid;
                CString strAboutMenu;
                bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
                ASSERT(bNameValid);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }

        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);                        // 设置大图标
        SetIcon(m_hIcon, FALSE);                // 设置小图标

        // TODO: 在此添加额外的初始化代码
        //CString        m_filename;
        GetPrivateProfileString(_T("文件"), _T("tnsfile"), _T("请查找tnsnames.ora文件"), strPath.GetBuffer(MAX_PATH), MAX_PATH, _T(".//tnsfile.ini"));
        SetDlgItemText(IDC_EDIT1, strPath);

        hCursor = LoadCursorFromFile(_T(".//res//starwar.ani"));

        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CSwitchTNSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
                CAboutDlg dlgAbout;
                dlgAbout.DoModal();
        }
        else
        {
                CDialog::OnSysCommand(nID, lParam);
        }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CSwitchTNSDlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // 用于绘制的设备上下文

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

                // 使图标在工作区矩形中居中
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;

                // 绘制图标
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialog::OnPaint();
        }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CSwitchTNSDlg::OnQueryDragIcon()
{
        return static_cast<HCURSOR>(m_hIcon);
}



void CSwitchTNSDlg::OnBnClickedButton1()//浏览按钮
{

        CFileDialog file(TRUE, NULL, _T("tnsnames.ora"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
                _T("ora|*.ora|txt|*.txt|All Files (*.*)|*.*||"), this);
        if (file.DoModal() == IDOK)
        {
                strPath = file.GetPathName();
        }
        else
        {
                return;
        }
        GetDlgItem(IDC_EDIT1)->SetWindowText(strPath);

        GetDlgItemText(IDC_EDIT1, strPath);
        WritePrivateProfileString(_T("文件"), _T("tnsfile"), strPath, _T(".//tnsfile.ini"));

        /*设置语言为中文,否则在Unicode编码下读出中文为乱码*/
        char* old_locale = _strdup(setlocale(LC_CTYPE, NULL));
        setlocale(LC_CTYPE, "CHS");

        CStdioFile mFile;
        mFile.Open(strPath, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite | CFile::typeText);
               
        CString strText = _T("");
        CString strLine = _T("");

        while (mFile.ReadString(strLine))
        {
                strText += strLine + _T("\r\n");
        }
        m_edit.SetWindowText(strText);
        mFile.Close();
        setlocale(LC_CTYPE, old_locale);//还原语言区域设置
        free(old_locale);//还原区域设定
}


void CSwitchTNSDlg::OnBnClickedButton2()//市本级正式库
{
        GetDlgItemText(IDC_EDIT1, strPath);//从编辑框获取文件完整路径
        CStdioFile mFile;
        if (!mFile.Open(strPath, CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeText))
        {
                MessageBox(_T("文件打开失败!"));
                return;
        }
        if (mFile.GetLength()==0)
        {
                MessageBox(_T("您打开了一个空文件!"));
                return;
        }
        CString strText;
        DWORD dwPos = 0;
        LPCTSTR pszSrc = _T("simis=");
        LPCTSTR pszDes = _T("simis=\n"\
                "DESCRIPTION =\n  "\
                "(ADDRESS_LIST =\n"\
                "      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.90.130.3)(PORT = 1521))");
        while (mFile.ReadString(strText))
        {
                if (strText == pszSrc)
                {
                        dwPos = (DWORD)mFile.GetPosition() - (_tcslen(pszSrc) + _tcslen(_T("\r\n")));
                        mFile.Seek(dwPos, CFile::begin);
                        mFile.WriteString(pszDes);
                        //MessageBox(_T("合肥市正式库切换成功! "));
                        m_edit.SetWindowText(_T(""));
                        m_edit.SetWindowText(_T("合肥市正式库切换成功!"));

                        GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
                        GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
                        GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);

                        break;
                }
                else
                {
                        m_edit.SetWindowText(_T(""));
                        m_edit.SetWindowText(_T("合肥市正式库切换失败!"));
                }
        }
        mFile.Close();
}



void CSwitchTNSDlg::OnBnClickedButton3()//市本级测试库
{
        GetDlgItemText(IDC_EDIT1, strPath);//从编辑框获取文件完整路径
        CStdioFile mFile;
        if (!mFile.Open(strPath, CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeText))
        {
                MessageBox(_T("文件打开失败!"));
                return;
        }
        if (mFile.GetLength() == 0)
        {
                MessageBox(_T("您打开了一个空文件!"));
                return;
        }
        CString strText;
        DWORD dwPos = 0;
        LPCTSTR pszSrc = _T("simis=");
        LPCTSTR pszDes = _T("simis=\n"\
                "DESCRIPTION =\n  "\
                "(ADDRESS_LIST =\n"\
                "      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.90.130.1)(PORT = 1521))");
        while (mFile.ReadString(strText))
        {
                if (strText == pszSrc)
                {
                        dwPos = (DWORD)mFile.GetPosition() - (_tcslen(pszSrc) + _tcslen(_T("\r\n")));
                        mFile.Seek(dwPos, CFile::begin);
                        mFile.WriteString(pszDes);
                        //MessageBox(_T("合肥市测试库切换成功! "));
                        m_edit.SetWindowText(_T(""));
                        m_edit.SetWindowText(_T("合肥市测试库切换成功!"));

                        GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
                        GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
                        GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);

                        break;
                }
                else
                {
                        m_edit.SetWindowText(_T(""));
                        m_edit.SetWindowText(_T("合肥市测试库切换失败!"));
                }
        }
        mFile.Close();
}


BOOL CSwitchTNSDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        SetCursor(hCursor);
        return TRUE;
        //return CDialog::OnSetCursor(pWnd, nHitTest, message);
}


void CSwitchTNSDlg::OnBnClickedButton4()
{
        GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
        GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
        GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
}

点评

学习了,感谢分享。  发表于 2019-7-5 10:03
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-26 15:47

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表