Using INI Files/zh CN: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Using INI Files/zh CN
| Old | New | Line | |
|---|---|---|---|
| 1 | + | ## INI 文件 | |
| 2 | + | ||
| 3 | + | ### 基本信息 | |
| 4 | + | ||
| 5 | + | INI文件可以被方便地用来储存用户基本设置。通过**INIfiles**单元和**TINIFile**类,你可以轻松地使用已有的Ini文件。这个单元包括在FCL中。 | |
| 6 | + | ||
| 7 | + | ### INI 文件 | |
| 8 | + | ||
| 9 | + | INI文件使用方括号来创建**类目**,每个类目中有包含许多**键**与其**值**,一个键和与其对应的值使用等于号连接(key=Value)。 | |
| 10 | + | ||
| 11 | + | 类目总是被包含在方括号里 (\[Section\]). | |
| 12 | + | ||
| 13 | + | 注释当然是允许的,只要在注释行的开头加上一个分号(;)就可以了。由于INI文件并没有统一的标准,所以其他的一些符号也有可能被使用,比如#。 | |
| 14 | + | ||
| 15 | + | 如今,XML文件经常被用来替代INI文件用作字符串的储存,因为INI文件对较长字符串的支持并不是太好。但是INI(类INI)文件依旧保持着Linux/Unix下设置文件的统治地位 | |
| 16 | + | ||
| 17 | + | 一个INI文件的简单例子: | |
| 18 | + | ||
| 19 | + | ``` ini | |
| 20 | + | ; INI文件开头的注释 | |
| 21 | + | ||
| 22 | + | ; 空行将会被忽略 | |
| 23 | + | ||
| 24 | + | ; 注意这里并没有定义任何的类目 | |
| 25 | + | Compiler=Delphi | |
| 26 | + | ; 键: Compiler | |
| 27 | + | ; 值: Delphi | |
| 28 | + | ||
| 29 | + | [General] | |
| 30 | + | ; 这个标记表示General类目的开始 | |
| 31 | + | Compiler=FreePascal | |
| 32 | + | ; 键是 Compiler 且值是 FreePascal | |
| 33 | + | ``` | |
| 34 | + | ||
| 35 | + | ### Ini 文件读取实例 | |
| 36 | + | ||
| 37 | + | 下面的命令行程序展示了如何读取INI文件,为了测试这个程序我们必须建立如下的INI文件并保存为“C:\DB.ini”。编辑INI文件使它拥有一个叫做"INIDB"的类目以及如下的键与值: | |
| 38 | + | ||
| 39 | + | ``` ini | |
| 40 | + | [INIDB] | |
| 41 | + | ; 保存为 C:\DB.ini | |
| 42 | + | Author=Adam | |
| 43 | + | Pass= | |
| 44 | + | DBFile=C:\Money.dat | |
| 45 | + | ``` | |
| 46 | + | ||
| 47 | + | 现在让我们回到代码 | |
| 48 | + | ||
| 49 | + | ``` pascal | |
| 50 | + | Program IniSample; | |
| 51 | + | ||
| 52 | + | {$mode objfpc}{$H+} | |
| 53 | + | ||
| 54 | + | Uses | |
| 55 | + | Classes,SysUtils,INIFiles; | |
| 56 | + | ||
| 57 | + | Var | |
| 58 | + | INI:TINIFile; | |
| 59 | + | Author,Pass,DBFile:String; | |
| 60 | + | PassEnter:String; | |
| 61 | + | ||
| 62 | + | begin | |
| 63 | + | // 建立INI文件并指定INI文件的位置 | |
| 64 | + | INI := TINIFile.Create('C:\DB.ini'); | |
| 65 | + | // 从INI文件读取字符串的实例 | |
| 66 | + | // 你也可以读取想Boolean这样别的值 | |
| 67 | + | Author := INI.ReadString('INIDB','Author',''); | |
| 68 | + | Pass := INI.ReadString('INIDB','Pass',''); | |
| 69 | + | DBFile := INI.ReadString('INIDB','DBFile',''); | |
| 70 | + | if Pass <> '' then | |
| 71 | + | begin | |
| 72 | + | Writeln('Password Required'); | |
| 73 | + | Repeat | |
| 74 | + | Readln(PassEnter); | |
| 75 | + | if not (PassEnter = Pass) then Writeln('Wrong Password'); | |
| 76 | + | until(PassEnter = Pass); | |
| 77 | + | Writeln('Correct Password'); | |
| 78 | + | end; | |
| 79 | + | Writeln('Author : '+Author); | |
| 80 | + | Writeln('File : '+DBFile); | |
| 81 | + | Writeln('Password : '+Pass); | |
| 82 | + | Readln; | |
| 83 | + | // 在使用完INI文件后,你必须调用对象的Free方法 | |
| 84 | + | // 虽然这应该在try...finally块中... | |
| 85 | + | // 因为这个对象可能因为上述语句的一些错误而过早释放 | |
| 86 | + | Ini.Free; | |
| 87 | + | end. | |
| 88 | + | ``` | |
| 89 | + | ||
| 90 | + | ### 对象百科 | |
| 91 | + | ||
| 92 | + | 在TINIFile类中有许多不同的属性、过程和函数可以使用。 | |
| 93 | + | ||
| 94 | + | **CaseSensitive** - 这个属性允许你设置对于键和类目的名称是否大小写敏感,默认不敏感。 | |
| 95 | + | ||
| 96 | + | **ReadString** - 拥有三个参数:第一个是需要搜索的类目,第二个是要搜索的键,第三个是当类目或键未找到时返回的默认值 。 | |
| 97 | + | ||
| 98 | + | **WriteString** - 同样拥有三个参数:第一个是类目,第二个键,第三个是要写入的值,如果键或类目已经存在,旧的数值会被新的数值覆盖。 | |
| 99 | + | ||
| 100 | + | **ReadSections** - 它允许你导出INI文件中所有的类目并放入TString类的实例中(或使用AS操作符转换为TStringList) | |
| 101 | + | ||
| 102 | + | **DeleteKey** - 从一个指定的类目中删除一个已经存在的键。 | |
| 103 | + | ||
| 104 | + | **EraseSection** - 删除一个类目以及其下所有的数据(键与值)。 | |
| 105 | + | ||
| 106 | + | 除此之外还有许多其他的过程或函数,但这些足够使你开始。 | |
| 107 | + | ||
| 108 | + | ### 参考文档 | |
| 109 | + | ||
| 110 | + | 这: [FP中关于INI文件的文档](http://lazarus-ccr.sourceforge.net/docs/fcl/inifiles/index.html) | |
| 111 | + | ||
| 112 | + | ## 相关链接 | |
| 113 | + | ||
| 114 | + | - [[XML Tutorial/zh CN]] | |
| 115 | + | ||
| 116 | + | --- | |
| 117 | + | *From the Free Pascal wiki, page "Using INI Files/zh CN", as it stood on 2020-03-04 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
