API读写INI文件

ini文件的大概内容如下:

[DEL_TABLE]
LangCount = 24
Lang1  =  CP936.BF          
Lang2  =  CP1252.BF
Lang3  =  CP950.BF
Lang4  =  CP932.BF

CString csDelTable = "DEL_TABLE";
  CString csLangCount = "LangCount";
  char szLangNum[MAX_PATH];


  GetPrivateProfileString(csDelTable,csLangCount,"",szLangNum,MAX_PATH,csIniPath);

 

szLangNum为csLangCount的等号右边的字符串。

 

用API写INI文件的函数有

BOOL WritePrivateProfileString(

    LPCTSTR lpAppName, // 节名
    LPCTSTR lpKeyName, // 键名
    LPCTSTR lpString, // 添加的字符串
    LPCTSTR lpFileName  // Ini文件名
   );

BOOL WritePrivateProfileStruct(
    LPCTSTR lpszSection, // pointer to section name
    LPCTSTR lpszKey, // pointer to key name
    LPVOID lpStruct, // 要写入的数据缓冲区
    UINT uSizeStruct, // 缓冲区的大小
    LPCTSTR szFile // pointer to initialization filename
   );
BOOL WritePrivateProfileSection(

    LPCTSTR lpAppName, // pointer to string with section name
    LPCTSTR lpString, // 写入的字符串
    LPCTSTR lpFileName  // pointer to string with filename
   );

用API读INI文件的函数有

DWORD GetPrivateProfileString(

    LPCTSTR lpAppName, // points to section name
    LPCTSTR lpKeyName, // points to key name
    LPCTSTR lpDefault, // 默认字符串 ,如果没有则返回该值
    LPTSTR lpReturnedString, // 返回的字符串
    DWORD nSize, // 返回字符串的大小
    LPCTSTR lpFileName  // points to initialization filename
   );
DWORD GetPrivateProfileSection(

    LPCTSTR lpAppName, // address of section name
    LPTSTR lpReturnedString, // address of return buffer
    DWORD nSize, // size of return buffer
    LPCTSTR lpFileName  // address of initialization filename  
   );
UINT GetPrivateProfileInt(

    LPCTSTR lpAppName, // address of section name
    LPCTSTR lpKeyName, // address of key name
    INT nDefault, // return value if key name is not found
    LPCTSTR lpFileName  // address of initialization filename
   ); 
BOOL GetPrivateProfileStruct(

    LPCTSTR lpszSection, // address of section name
    LPCTSTR lpszKey, // address of key name
    LPVOID lpStruct, // address of return buffer
    UINT uSizeStruct, // size of return buffer
    LPCTSTR szFile // address of initialization filename
   );
DWORD GetPrivateProfileSectionNames(

    LPTSTR lpszReturnBuffer, // address of return buffer
    DWORD nSize, // size of return buffer
    LPCTSTR lpFileName // address of initialization filename
   );

 

当然还有如WriteProfileString,WriteProfileSection,WriteProfileSturct, GetProfileString,GetProfileStruct,GetProfileSectionNames,GetProfileInt,GetProfileSection但这些只对Win.ini有效
下面我们来学习它们的用法
WritePrivateProfileString函数是向ini文件中写入字符串,如
WritePrivateProfileString(Pchar('类型'),Pchar('API'),Pchar('API 真好!'),Pchar('c:/example.ini'));
如果第二个参数是nil,那么该操作将删除该节
如果第三个参数为nil,那么该操作将删除该节中的所有键
如果在指定的文件中没有路径,那么它将在系统的目录寻找文件,如果不存在则建立

WritePrivateProfileSection是向文件中写入一整个键,其它键的格式为key = value,如
WritePrivateProfileSection(Pchar('类型'),Pchar('其它=123'),Pchar('c:/example.ini'));
注意,该操作将删除该节中的所有键后在进行本次的写入

WritePrivateProfileStruct是向文件中写入一个结构,如
type
  TPerson = record
    Name:string;
    Age:integer;
  end;
var
   Per:TPerson;
WritePrivateProfileStruct(Pchar('类型'),Pchar('结构'),@Per,Sizeof(Per),Pchar('C:/example.ini'));

GetPrivateProfileString是从文件中读出一个指定键的字符串,如果没有找到,则返回默认值
GetPrivateProfileString(Pchar(‘类型'),Pchar('API'),Pchar('no value'),Str1,21,Pchar('c:/example.ini'));

GetPrivateProfileSection是从文件中读出一整个键
GetprivateProfileSection('类型',str1,200,'c:/example.ini');

GetPrivateProfileInt是从文件中读出指定键的整型值,如果没找到或不是整型的值,则返回默认值,如果返回值小于0,则返回0,如
i:=GetPrivateProfileInt(Pchar('类型'),Pchar('整型'),i,Pchar('C:/example.ini'));
showMessage(inttostr(i));

GetPrivateProfileStruct从文件中读出指定键的结构值,如
type
  TPerson = record
    Name:string;
    Age:integer;
  end;
var
   Buffer:TPerson;
GetPrivateProfileStruct(Pchar('类型'),Pchar('结构'),@Buffer,Sizeof(Per),Pchar('C:/example.ini'));

GetPrivateProfileSectionNames是从文件中读出所有节的名称,该函数返回读入缓冲区的字符数,如
count:=GetPrivateProfileSectionNames(Str3,200,Pchar('c:/example.ini'));
ShowMessage(Str3);
此处显示的只是第一个节的名称,如果要显示第二个字符的名称则要用到下面这句
showmessage(str3+5);
这句不用多解释吧?
以上就是这些函数的用法。你可能要问“怎么只有写字符串的呀,怎么没有写其它的类型的呢?”,问的好,不过其它类型的用WritePrivateProfileString都能代替,如要写浮点型的就把该类型的放到’’当中,如’12.5’。那位学友又问了,“如果是让用户输入,他们也不知道应该输入什么,怎么能限制他们输入的都是数字”,这方法可太多了,如用控件或检查它们是不是在指定的数字,你可别说不会限制它们是不是数字呀*_^,如果真的不会,你就看它们的ASCII码是不是在48-57之间就行了。“那读出呢?”,Delphi不是有StrToInt,StrToFloat,StrToCurr等这么函数嘛,可以用它们来转换。
我在研究这些函数的同时,发现了一段有趣程序代码,但我不知道它为什么要这样做,有什么好处,大家可以看看它们,不过是用C写的,它们在Delphi SDK或MSDN中查找WritePrivateProfileString函数,在最下面的那个段代码就是

如果我在上面说的有错误的话,希望大家指正,共同讨论学习


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值