在VB6中用WINDOWS API函数读写INI文件

原创 2001年05月12日 18:36:00
 

在VB6中用WINDOWS API函数读写INI文件


   WinInet(Win32 Internet functions)提供给程序员一套完整的Internet调用函数,它被包含在一个名为Wininet.dll的动态联接库里。通过它可以轻松地完成对HTTP,FTP以及Gopher的访问。比如下载HTML页面;发送FTP请求从而上传或下载文件还可浏览目录列表,典型的应用是可以通过匿名登录获取文件,还有你更新自己的主页时上传文件;Gopher的菜单系统使你可以获取英特网上的资源。对于这三个协议来说,使用它们的步骤是相同的:建立联接——向服务器提出请求——关闭联系。当然你也可以通过MFC(Microsoft Foundation Class)更为简单地(甚至是傻瓜式地)使用WinInet。因为在MFC中,你可以简单地像访问硬盘一样访问HTTP、FTP以及Gopher服务器(当然不是指可以乱涂乱画啦……);你更可以不去理睬WinSock和TCP/IP;当然你完全有可能自己从底层写起,我想其中一个明显的原因是你认为MFC不够快,放心吧同志,这不是写3D游戏……不过要是你认为它不够灵活的话,那只有自己写了,没什么大不了的;还有就是你可以用现成的类(CHttpFile、CFtpFileFind、CGopherFileFind)控制你的数据,因为这些类把这三个协议抽象到了高层的应用程序编程界面,提供快速并且简单的方法。所以对于用Visual C++的你来说,你至少有两种方法来使用WinInet:直接调用Win32 Internet Functions和MFC。下面就分别用这两种方法通过HTTP下载Web页面,为了更明朗地说明问题,假设网络畅通无阻,所以你会看到下面的代码都没有错误或异常处理。准备好一个单文档界面的自动生成项目,它的视的基类最好是CEditView,这样可以直接把获取的信息显示出来;添加一个工具栏图标,在视中相应消息OnGetHttp()。
  首先通过直接调用Win32 Internet Functions下载http://www.hust.edu.cn下的缺省页面,将要用到的下面几个函数:AfxParseURL(或者它的扩展AfxParseURLEx)、InternetOpen、InternetConnect、HttpOpenRequest、HttpSendRequest、InternetReadFile、InternetCloseHandle。不用多说,你也可以从它们的名字里猜出它们的功能,函数说明请可以参阅MSDN。
  void CWinInetTestView::OnGethttp()
  {
  //使用Win32API获取页面
  CString strURL = ″http://www.hust.edu.cn″;
  HINTERNET hSession;
  HINTERNET hConnect = NULL;
  HINTERNET hURL = NULL;
  try
  {
  CString strServer,strObject;
  INTERNET_PORT nPort;
  DWORD dwServiceType;
  //分析给定的URL, 取回服务信息
  AfxParseURL(strURL,dwServiceType, strServer, strObject, nPort);
  //初始化网络动态联接库,通常用户只需要调用一次InternetOpen,
  //但多次调用InternetOpen是允许的,
  //比如需要对不同的实例提供不同的代理服务器
  hSession=::Internet Open(″WinInet Test″,
  INTER-NET_OPEN-TYPE-PRECONFIG,
  (LPCTSTR)NULL,
  NULL,0);
  //联接服务器
  hConnect=::Internet Connect(h Session,strServer,
  INTER-NET-INVALID-PORT-NUMBER,
  ″″, ″″,
  INTERNET-SERVICE-HTTP,
  0,0) ;
  const char *lpszAcceptTypes[2] = {_T(″Accept: text/* /r″), NULL};
  //获得指定的HTTP句柄
  hURL = ::HttpOpenRequest(hConnect, ″GET″, strObject,
  HTTP_VERSION, NULL, lpszAcceptTypes,INTERNET-FLAG-EXISTING-CONNECT|
  INTER-NET-FLAG-NO_AUTO-REDIRECT|
  INTERNET-FLAG-DONT-CACHE|
  INTERNET-FLAG-RELOAD,0) ;
  //向HTTP服务器发送请求
  ::HttpSendRequest(hURL,NULL,0,0,0);
  CString sText;
  TCHAR sz[1024];
  DWORD dwBytesRead;
  BOOL bOkay = TRUE;
  //循环接收
  while(bOkay)
  {
  bOkay = ::InternetReadFile(hURL,sz,1023,&dwBytesRead);
  if(bOkay && dwBytesRead > 0)
  {
  sz[dwBytesRead-1] = '/0';
  sText = sz;
  sText.Replace(_T(″/n″), _T(″/r/n″));
  GetEditCtrl().ReplaceSel(sText);
  }
  else break;
  } }
  catch(……)
  {
  }
  //关闭相关句柄
  ::InternetCloseHandle(hURL);
  ::InternetCloseHandle(hConnect);
  ::InternetCloseHandle(hSession);
  }
  下面用MFC完成同样的工作,可以看得出,需要写的代码相对减少了,而且更为简单,当你写大程序时,这一点更为明显。需要用到的几个类是:CInternetSession、CHttpConnection、CHttpFile。
  void CWinInet TestView::OnGethttp()
  {
  CInternetSession internetSession(″WinInetTest″, 1, PRE-CONFIG-INTERNET-ACCESS);
  CHttpConnection* m-pHttpServer;
  CHttpFile* m-pHttpFile;
  try
   {
  CString strServer;
  CString strObject;
  INTERNET_PORT nPort;
  DWORD dwServiceType;
  AfxParseURL(strURL, dwServiceType, strServer, strObject, nPort);
  m_pHttpServer =internetSession.GetHttp Connection(strServer, nPort);
  m-pHttpFile=m-pHttpServer→OpenRequest(CHttpConnection::HTTP-VERB_GET,
  strObject, NULL, 1, NULL, NULL, INTER-NET-FLAG-EXISTING-CONNECT|INTERNET-FLAG-NO-AUTO-REDIRECT);
  m_pHttpFile->AddRequestHeaders(_T(″Accept: text/*/r/n″));
  m_pHttpFile->SendRequest();
  CString sText;
  TCHAR sz[1024];
  while (m_pHttpFile->ReadString(sz, 1023))
  {
  sText = sz;
  sText.Replace(_T(″/n″), _T(″/r/n″));
  GetEditCtrl().ReplaceSel(sText);
  } }
  catch(……)
  {
  }
  if (m_pHttpFile != NULL)
  delete m_pHttpFile;
  if (m_pHttpServer != NULL)
  delete m_pHttpServer;
  internetSession.Close();
  }
  需要注意的是,以上两段代码都没有运用多线程技术,当线路不好或页面很大时,你的程序就像是死了一样,没有反应。所以呢,你应当恰当地运用多线程技术,结合相关的状态回调函数,提供给用户一个友好的操作界面。当然,别忘了控制错误异常,这在网络编程中显得尤其重要

windows API 读写ini文件

ini文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Sect...
  • zzandyc
  • zzandyc
  • 2017年05月11日 21:40
  • 193

在VB6中用WINDOWS API函数读写INI文件

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:25
  • 120

使用win api 读写 ini配置文件

     游戏或者其他应用程序需要很多配置信息,比如:窗口的长宽,是否全屏显示。所以每一个游戏都支持配置文件的读取以及写入。     而ini文件因为其结构简单易懂,而被广泛应用。记得在实习培训的时...
  • hycoldrain
  • hycoldrain
  • 2010年09月17日 08:07
  • 1622

WIN32读写INI文件方法

概述 在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置、大小、一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般...
  • yangluoning
  • yangluoning
  • 2013年12月30日 12:11
  • 5481

VB6读取INI文件

开发环境:VB6  程式版本更新, 读取INI文件做对比, 确认版本是否最新. 可用VB6的工具下的API检视员来自动生成API调用代码. INI文件内容: [Version] TE...
  • hellozhangyanlin
  • hellozhangyanlin
  • 2017年12月06日 10:03
  • 69

VB6中一个非常好用的读写Ini文件的模块

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:23
  • 140

VB读写INI文件的四个函数以及相关API详细说明

WritePrivateProfileString函数说明 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应...
  • wjb9921
  • wjb9921
  • 2007年12月30日 16:56
  • 2430

API读取写入 ini文件内容的方法函数详解

ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Ke...
  • yangzhao0001
  • yangzhao0001
  • 2015年10月29日 14:36
  • 189

用 Windows API 创建和编辑 .ini 文件

1. 与 .ini 文件相关的 API 有两类: 1)操作系统配置文件 Win.ini 的函数 GetProfileSection GetProfileString GetProfileInt W...
  • g5dsk
  • g5dsk
  • 2011年10月10日 18:12
  • 4342

用API函数读写初始化文件(*.ini)的方法

在易语言中读写初始化文件(*.ini)的方法 易语言有读写配置项的命令,但API的更丰富。以前以为初始化文件也和普通文件的读写方法一样,今天看了一下api for vb 的说明,才知道Windows中...
  • bylost
  • bylost
  • 2017年03月15日 14:02
  • 271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VB6中用WINDOWS API函数读写INI文件
举报原因:
原因补充:

(最多只允许输入30个字)