如何用VFP读写配置文件(.INI)?

本文介绍了如何使用VFP(Visual FoxPro)进行.INI配置文件的读写操作。通过示例代码展示了读取INI文件到游标,以及利用Win32API DLL函数进行写入和读取配置信息的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何用VFP读写配置文件(.INI)?

---------------------------------------------------------------

******读写(读取) INI 文件内容
--------------------------------

******以下是一个读取INI文件的例子1*******

* Reading an arbitrary INI file into a cursor 
* 读一个 INI 文件到一个游标
Local lcFileName
lcFileName = getfile("ini")
Create CURSOR csResult (section C(50), keyname C(50),keyvalue C(200))
lcSections = getSections (lcFileName)
= str2cursor (lcSections, "csSections")
Select csSections
Scan ALL
Select csSections
lcKeys = getKeys (lcFileName, csSections.strvalue)
= str2cursor (lcKeys, "csKeys")
Select csKeys
Scan ALL
lcValue = getKeyValue (lcFileName,csSections.strvalue, csKeys.strvalue)
Insert INTO csResult VALUES (csSections.strvalue, csKeys.strvalue, lcValue)
Endscan
Endscan
Select csResult
Go TOP
Browse NORMAL NOWAIT
FUNCTION getSections (lcFileName)
Declare INTEGER GetPrivateProfileString IN kernel32 INTEGER lpAppName,INTEGER lpKeyName,STRING lpDefault,STRING @ lpReturnedString,INTEGER  nSize,STRING lpFileName
Local lnSize, lpReturnedString, lnResult
lnSize = 4096
lpReturnedString = Repli (Chr(0), lnSize)
lnResult = GetPrivateProfileString (0,0,"#empty#",@lpReturnedString,lnSize,lcFileName)
Return  Left (lpReturnedString, lnResult)
ENDFUNC
FUNCTION getKeys (lcFileName, lcSection)
Declare INTEGER GetPrivateProfileString IN kernel32 STRING lpAppName,INTEGER lpKeyName,STRING lpDefault,STRING @ lpReturnedString,INTEGER nSize,STRING lpFileName
Local lnSize, lpReturnedString, lnResult
lnSize = 16384
lpReturnedString = Repli (Chr(0),lnSize)
lnResult = GetPrivateProfileString (lcSection,0,"#empty#",@lpReturnedString,lnSize,lcFileName)
Return  Left (lpReturnedString, lnResult)
ENDFUNC
FUNCTION getKeyValue (lcFileName, lcSection, lcKey)
Declare INTEGER GetPrivateProfileString IN kernel32 STRING lpAppName,STRING lpKeyName,STRING lpDefault,STRING @ lpReturnedString,INTEGER nSize,STRING lpFileName
Local lnSize, lpReturnedString, lnResult
lnSize = 16384
lpReturnedString = Repli (Chr(0), lnSize)
lnResult = GetPrivateProfileString (lcSection,lcKey,"#empty#",@lpReturnedString,lnSize,lcFileName)
Return  Left (lpReturnedString, lnResult)
endfunc
FUNCTION str2cursor (lcSource, lcCursor)
Create CURSOR (lcCursor) (strvalue C(250))
Local ii, ch, ss, lnResult
ss = ""
lnResult = 0
For ii=1 TO Len(lcSource)
ch = SUBSTR (lcSource, ii,1)
If ch = Chr(0)
Insert INTO (lcCursor) VALUES (ss)
lnResult = lnResult + 1
ss = ""
Else
ss = ss + ch
Endif
Endfor
Return  lnResult
ENDFUNC
FUNCTION  getWindowsDir
Declare INTEGER GetWindowsDirectory IN kernel32 STRING @lpBuffer,INTEGER nSize
lpBuffer = SPACE (250)
nSizeRet = GetWindowsDirectory (@lpBuffer, Len(lpBuffer))
Return  SUBSTR (lpBuffer, 1, nSizeRet)
ENDFUNC
****************************************



******以下是一个读写INI文件的例子2*******

*-- 定义读应用程序 INI 文件的DLL函数
DECLARE INTEGER GetPrivateProfileString IN Win32API AS GetPrivStr ;
String cSection, String cKey, String cDefault, String @cBuffer, ;
Integer nBufferSize, String cINIFile
*-- 定义写应用程序 INI 文件的DLL函数
DECLARE INTEGER WritePrivateProfileString IN Win32API AS WritePrivStr ;
String cSection, String cKey, String cValue, String cINIFile
&& 调用
&& 以下程序将字符串abc=12,24写入当前目录中的formposi.ini文件中的WindowPositions段中:
LOCAL lcValue,lcEntry
lcEntry = "abc"
lcValue = '12,24'
=WritePrivStr("WindowPositions", lcEntry, lcValue, CURDIR() + "formposi.ini")
&& 以下程序从当前目录中的formposi.ini文件中的WindowPositions段中读取以前保存的字符串,并在wait window中显示出来
LOCAL lcBuffer,lcOldError,lnTop,lnLeft,llError,lnCommaPos,lcEntry
lcEntry = 'abc'
lcBuffer = SPACE(10) + CHR(0)
lcOldError = ON('ERROR')
*-- 在INI 文件中读取窗口位置
IF GetPrivStr("WindowPositions", lcEntry, "", @lcBuffer, LEN(lcBuffer), CURDIR() + "formposi.ini") > 0
*-- 如果分解参数时出现错误,
*-- 忽略该串并使用表单的默认值
ON ERROR llError = .T.
lnCommaPos = AT(",", lcBuffer)
lnTop = VAL(LEFT(lcBuffer, lnCommaPos - 1))
lnLeft = VAL(SUBSTR(lcBuffer, lnCommaPos + 

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值