INI file

原文地址:https://en.wikipedia.org/wiki/INI_file

 

INI file

From Wikipedia, the free encyclopedia
Jump to: navigation, search

The INI file format is an informal standard for configuration files for some platforms or software. INI files are simple text files with a basic structure composed of "sections" and "properties".

In MS-DOS and 16-bitWindows platforms, the INI file served as the primary mechanism to configure operating system features, such as device drivers. INI files were also generally used by applications to store their individual settings.

In Windows NT Microsoft introduced theregistry, and began to steer developers away from using INI files for configuration. All subsequent versions of Windows have used the Windows Registry for system configuration, and applications built on the .Net Framework use specialXML .config files. The APIs still exist in Windows, however, and developers may still use them.

The name "INI file" comes from the commonly used filename extension, .INI, which stands for "initialization". Other common extensions are.CFG, .conf, and .TXT.[citation needed]

Linux and Unix systems also use a similar file format for system configuration. In addition, platform-agnostic software may use this file format for configuration. It is human-readable and simple to parse, so it is a usable format for configuration files that do not require much greater complexity.

Contents

Format

Keys (properties)

The basic element contained in an INI file is the key or property. Every key has aname and a value, delimited by an equals sign (=). The name appears to the left of the equals sign.

name=value

Sections

Keys may be grouped into arbitrarily named sections. The section name appears on a line by itself, insquare brackets ([ and]). All keys after the section declaration are associated with that section. There is no explicit "end of section" delimiter; sections end at the next section declaration, or the end of the file. Sections may not be nested.

[section]

Case insensitivity

Section and property names are not case sensitive in the Windows implementation.[1]

Comments

Semicolons (;) at the beginning of the line indicate acomment. Comment lines are ignored.

; comment text

Varying features

The INI file format is not well defined. Many programs support features beyond the basics described above. The following is a list of some common features, which may or may not beimplemented in any given program.

Blank lines

Some rudimentary programs do not allow blank lines. Every line must therefore be a section head, a property, or a comment.

Comments

Some software supports the use of the number sign (#) as an alternative to the semicolon for indicating comments.

In some implementations, a comment may begin anywhere on a line, including on the same line after properties or section declarations. In others, including Windows' GetPrivateProfileString function, comments must occur on lines by themselves.

Duplicate names

Most implementations only support having one property with a given name in a section. The second occurrence of a property name may cause anabort; the second occurrence may be ignored (and the value discarded); the second occurrence may override the first occurrence (discard the first value). Some programs use duplicate property names to implement multi-valued properties.

Interpretation of multiple section declarations with the same name also varies. In some implementations, duplicate sections simply merge their properties together, as if they occurred contiguously. Others may abort, or ignore some aspect of the INI file.

Escape characters

Some implementations also offer varying support for an escape character, typically with the backslash (\). Some support "line continuation", where a backslash followed immediately by EOL (end-of-line) causes the line break to be ignored, and the "logical line" to be continued on the next actual line from the INI file. Implementation of various "special characters" with sequences escapes is also seen.

Common escape sequences
SequenceMeaning
\\\ (a single backslash, escaping the escape character)
\0Null character
\aBell/Alert/Audible
\bBackspace,Bell character for some applications
\tTab character
\rCarriage return
\nNewline
\;Semicolon
\#Number sign
\=Equals sign
\:Colon
\x????Unicode character withhexadecimalcode point corresponding to????
Global properties (implicit global section)

Optional "global" properties may also be allowed, that are declared before any section is declared.[2]

Hierarchy

Most commonly, INI files have no hierarchy of sections within sections. Some files appear to have a hierarchical naming convention, however. For section A, subsection B, sub-subsection C, property P and value V, they may accept entries such as[A.B.C] and P=V (Windows' xstart.ini), [A\B\C] andP=V (the IBM Windows driver file devlist.ini), or [A] andB,C,P = V (Microsoft Visual Studio file AEMANAGR.INI).

It is unclear whether these are simply naming conventions that an application happens to use in order to give theappearance of a hierarchy, or whether the file is being read by a module that actually presents this hierarchy to the application programmer.

Name/value delimiter

Some implementations allow a colon (:) as the name/value delimiter (instead of the equals sign).

Quoted values

Some implementations allow values to be quoted, typically using double quotes and/or apostrophes. This allows for explicit declaration of whitespace, and/or for quoting of special characters (equals, semicolon, etc.). The standard Windows functionGetPrivateProfileString

 
supports this, and will remove quotation marks that surround the values.

Whitespace

Interpretation of whitespace varies. Most implementations ignore leading and trailing whitespace around the outside of the property name. Some even ignore whitespace within values (for example, making "host name" and "hostname" equivalent). Some implementations also ignore leading and trailing whitespace around the property value; others consider all characters following the equals sign (including whitespace) to be part of the value.

Order of sections and properties

In most cases the order of properties in a section and the order of sections in a file is irrelevant, but implementations may vary.

Example

Following is an example INI file for an imaginary program. It has two sections, one for the owner of the software, and one for a payroll database connection. Comments note who modified the file last, and why anIP address is used instead of aDNS name.

; last modified 1 April 2001 by John Doe
[owner]
name=John Doe
organization=Acme Widgets Inc.
 
[database]
; use IP address in case network name resolution is not working
server=192.0.2.62     
port=143
file = "payroll.dat"

Accessing INI files

Under Windows, the Profile API is the programming interface used to read and write settings from classic Windows .ini files. For example, theGetPrivateProfileString

 
function retrieves a string from the specified section in an initialization file.

The following sample C program demonstrates reading property values from the above sample INI file (Let the name of configuration file bedbsettings.ini)

#include <windows.h>
int main(int argc, _TCHAR *argv[])
{
  _TCHAR dbserver[1000];
  int dbport;
  GetPrivateProfileString("database", "server", "127.0.0.1", dbserver, sizeof dbserver,
                          "dbsettings.ini");
  dbport = GetPrivateProfileInt("database", "port", 143, "dbsettings.ini");
  // N.B. WritePrivateProfileInt() does not exist
  return 0;
}

Python's standard library provides theconfigparser

 
module for parsing INI-like configuration files.

File mapping

Initialization File Mapping[3][4] creates a mapping between an INI file and the Registry. It was introduced with Windows NT and Windows 95 as a way to migrate from storing settings in classic .ini files to the newWindows Registry. File mapping traps the Profile API calls and, using settings from theIniFileMapping Registry section, directs reads and writes to appropriate places in the Registry.

Using the Example above, a string call could be made to fetch the name key from theowner section from a settings file called, say, dbsettings.ini. The returned value should be the string "John Doe":

GetPrivateProfileString("owner", "name", ... , "c:\\programs\\oldprogram\\dbsettings.ini");

INI mapping takes this Profile API call, ignores any path in the given filename and checks to see if there is a Registry key matching the filename under:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
   CurrentVersion\IniFileMapping

If this exists, it looks for an entry name matching the requested section. If an entry is found, INI mapping uses its value as a pointer to another part of the Registry. It then looks up the requested INI setting in that part of the Registry.

If no matching entry name is found and there is an entry under the (Default) entry name, INI mapping uses that instead. Thus each section name does not need its own entry.

HKEY_LOCAL_MACHINE\Software\...\IniFileMapping\dbsettings.ini
(Default)@USR:Software\oldprogs\inisettings\all
databaseUSR:Software\oldprogs\inisettings\db

So, in this case the profile call for the [owner] section is mapped through to:

HKEY_CURRENT_USER\Software\oldprogs\inisettings\all
nameJohn Doe
organizationAcme Products

where the "name" Registry entry name is found to match the requested INI key. The value of "John Doe" is then returned to the Profile call. In this case, the @ prefix on the default prevents any reads from going to the dbsettings.ini file on disk. The result is that any settings not found in the Registry are not looked for in the INI file.

The "database" Registry entry does not have the @ prefix on the value; thus, for the [database] sectiononly, settings in the Registry are taken first followed by settings in the dbsettings.ini file on disk.

Alternatives

Starting with Windows 95, Microsoft began strongly promoting the use of Windows registry over the INI file.

More recently, XML-based configuration files have become a popular choice for encoding configuration in text files. XML allows arbitrarily complex levels and nesting, and has standard mechanisms for encoding binary data. INI files are typically limited to two levels (sections and properties) and do not handle binary data well. Additionally, data serialization formats, such asJSON and YAML can serve as configuration formats. These three alternative formats can nest arbitrarily, but have a more heavyweight syntax than the INI file.

See also

References

  1. ^"GetPrivateProfileString function"
     
    . Microsoft Developer Network. Microsoft. Retrieved 2012-06-02.
  2. ^Apache Documentation for org.apache.commons.configuration.HierarchicalINIConfiguration
     
    , The Apache Software Foundation
  3. ^Initialization Files and the Registry
     
    , Windows NT Workstation Resource Kit, Microsoft TechNet
  4. ^Administering the NT Registry
     
    , Managing the Windows NT Registry, Paul Robichaux, O'Reilly Media

External links

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值