zoukankan      html  css  js  c++  java
  • VC++实现host文件读写


    Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。
    现在让我们来看看Hosts在Windows中是怎么工作的。
    我们知道在网络上访问网站,要首先通过DNS服务器把要访问的网络域名解析成XXX.XXX.XXX.XXX的IP地址后,计算机才能对这个网络域名作访问。
    要是对于每个域名请求我们都要等待域名服务器解析后返回IP信息,这样访问网络的效率就会降低,因为DNS做域名解析和返回IP都需要时间。
    为了提高对经常访问的网络域名的解析效率,可以通过利用Hosts文件中建立域名和IP的映射关系来达到目的。根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个网络域名映射关系。如果有,则调用这个IP地址映射,如果没有,再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。

    下面我们来实现读写host文件


    void CtesthostDlg::OnBnClickedButton1()
    {
    
    	CString strPath;
    	CString strSystem, strWindows;
    	::GetSystemDirectory(strSystem.GetBuffer(MAX_PATH), MAX_PATH);
    	::GetWindowsDirectory(strWindows.GetBuffer(32), 32);
    	TCHAR szDriver[5] = {0};
    	RtlCopyMemory(szDriver, strWindows.GetBuffer(), 3*sizeof(TCHAR));
    	szDriver[3] = 0;
    	strPath.Format("%s\\drivers\\etc\\hosts", strSystem);	
    
    	CStdioFile sf;   
    	CFileException e; 
    	CString strSign, strTemp, strFile;
    	bool bOpen = sf.Open(strPath, CFile::typeText|CFile::modeRead, &e);
    	if(bOpen)  
    	{		
    		int cnt = 0;
    		while(sf.ReadString(strSign) != NULL)  
    		{
    			cnt++;
    			strFile += strSign;
    			strFile += "\r\n";  
    			if(strSign.Trim().GetLength() == 0 || strSign.GetAt(0)=='#'|| strSign.GetAt(0)==';')
    				continue;			
    			strTemp.Format("%d", cnt);
    
    		}
    		sf.Close();
    	}
    	MessageBox(strFile);
        if (strFile.GetLength()>5)
        {
    
    
        } 
        else
        {
    
    
        }
    
    
    
    
    	// TODO: 在此添加控件通知处理程序代码
    }
    
    void CtesthostDlg::OnBnClickedButton2()
    {
    
    	CString strPath;
    	CString strSystem, strWindows;
    	::GetSystemDirectory(strSystem.GetBuffer(MAX_PATH), MAX_PATH);
    	::GetWindowsDirectory(strWindows.GetBuffer(32), 32);
    	TCHAR szDriver[5] = {0};
    	RtlCopyMemory(szDriver, strWindows.GetBuffer(), 3*sizeof(TCHAR));
    	szDriver[3] = 0;
    	strPath.Format("%s\\drivers\\etc\\hosts", strSystem);	
        
    	CString str_MSBC="8588"; 
    	CStringA str99 =(CStringA) str_MSBC;
    	CString fileName;  
    	fileName=strPath;
    	CStdioFile file;   
    	file.Open(fileName,CFile::modeCreate | CFile::modeWrite); 
    	file.SeekToEnd();
    	file.Write( str99,str99.GetLength());  
    	file.Close(); 
        
    
    	DWORD   dwAttrs=GetFileAttributes(strPath); 
    	dwAttrs==INVALID_FILE_ATTRIBUTES;
    	if   (!(dwAttrs  &  FILE_ATTRIBUTE_READONLY))   
    	{   
    		SetFileAttributes(strPath, dwAttrs | FILE_ATTRIBUTE_READONLY);   
    	}   
    
    
    	// TODO: 在此添加控件通知处理程序代码
    }


  • 相关阅读:
    2017.0321.数字电路与系统-触发器
    2017.0320.数字电路与系统-触发器
    2017.0319.数字电路与系统-算术逻辑单元
    2017.0317.数字电路与系统-减法器
    2017.0316.算术运算电路和ALU
    2017.0315.数字电路与系统-奇偶校验器
    2017.0313.数字电路与系统-数据选择器分配器的理解
    2017.0311.数字电路与系统-数据选择器分配器的理解
    2017.0310.数字电路与系统-数据选择器分配器的理解
    2017.0309.数字电路与系统-组合电路的模块分析
  • 原文地址:https://www.cnblogs.com/new0801/p/6177621.html
Copyright © 2011-2022 走看看