目录

Parameters

Return value

Remarks

Requirements

See also


Copies a string into the specified section of an initialization file.

BOOL WritePrivateProfileStringA(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpString,LPCSTR lpFileName
);

Parameters

lpAppName

The name of the section to which the string will be copied. If the section does not exist, it is created. The name of the section is case-independent; the string can be any combination of uppercase and lowercase letters.

将字符串复制到的节的名称。如果节不存在,则创建它。节的名称与大小写无关;字符串可以是大小写字母的任意组合。

lpKeyName

The name of the key to be associated with a string. If the key does not exist in the specified section, it is created. If this parameter is NULL, the entire section, including all entries within the section, is deleted.

要与字符串关联的键的名称。如果指定节中不存在该键,则创建该键。如果此参数为空,则删除整个节,包括该节中的所有条目。

lpString

null-terminated string to be written to the file. If this parameter is NULL, the key pointed to by the lpKeyName parameter is deleted.

要写入文件的以空结尾的字符串。如果此参数为空,则删除lpKeyName参数指向的键。

lpFileName

The name of the initialization file.

If the file was created using Unicode characters, the function writes Unicode characters to the file. Otherwise, the function writes ANSI characters.

初始化文件的名称。

如果文件是使用Unicode字符创建的,则函数会将Unicode字符写入文件。否则,函数将写入ANSI字符。

Return value

If the function successfully copies the string to the initialization file, the return value is nonzero.

If the function fails, or if it flushes the cached version of the most recently accessed initialization file, the return value is zero. To get extended error information, call GetLastError.

Remarks

A section in the initialization file must have the following form:

[section]
key=string...

If the lpFileName parameter does not contain a full path and file name for the file, WritePrivateProfileString searches the Windows directory for the file. If the file does not exist, this function creates the file in the Windows directory.

如果lpFileName参数不包含文件的完整路径和文件名,WritePrivateProfileString将在Windows目录中搜索该文件。如果文件不存在,此函数将在Windows目录中创建该文件。

If lpFileName contains a full path and file name and the file does not exist, WritePrivateProfileString creates the file. The specified directory must already exist.

如果lpFileName包含完整路径和文件名,而该文件不存在,则WritePrivateProfileString将创建该文件。指定的目录必须已经存在。

The system keeps a cached version of the most recent registry file mapping to improve performance. If all parameters are NULL, the function flushes the cache. While the system is editing the cached version of the file, processes that edit the file itself will use the original file until the cache has been cleared.

The system maps most .ini file references to the registry, using the mapping defined under the following registry key:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionIniFileMapping

This mapping is likely if an application modifies system-component initialization files, such as Control.ini, System.ini, and Winfile.ini. In this case, the function writes information to the registry, not to the initialization file; the change in the storage location has no effect on the function's behavior.

The profile functions use the following steps to locate initialization information:

  1. Look in the registry for the name of the initialization file under the IniFileMapping key.
  2. Look for the section name specified by lpAppName. This will be a named value under the key that has the name of the initialization file, or a subkey with this name, or the name will not exist as either a value or subkey.
  3. If the section name specified by lpAppName is a named value, then that value specifies where in the registry you will find the keys for the section.
  4. If the section name specified by lpAppName is a subkey, then named values under that subkey specify where in the registry you will find the keys for the section. If the key you are looking for does not exist as a named value, then there will be an unnamed value (shown as <No Name>) that specifies the default location in the registry where you will find the key.
  5. If the section name specified by lpAppName does not exist as a named value or as a subkey, then there will be an unnamed value (shown as <No Name>) that specifies the default location in the registry where you will find the keys for the section.
  6. If there is no subkey or entry for the section name, then look for the actual initialization file on the disk and read its contents.

When looking at values in the registry that specify other registry locations, there are several prefixes that change the behavior of the .ini file mapping:

  • ! - this character forces all writes to go both to the registry and to the .ini file on disk.
  • # - this character causes the registry value to be set to the value in the Windows 3.1 .ini file when a new user logs in for the first time after setup.
  • @ - this character prevents any reads from going to the .ini file on disk if the requested data is not found in the registry.
  • USR: - this prefix stands for HKEY_CURRENT_USER, and the text after the prefix is relative to that key.
  • SYS: - this prefix stands for HKEY_LOCAL_MACHINE\SOFTWARE, and the text after the prefix is relative to that key.

An application using the WritePrivateProfileString function to enter .ini file information into the registry should follow these guidelines:

  • Ensure that no .ini file of the specified name exists on the system.
  • Ensure that there is a key entry in the registry that specifies the .ini file. This entry should be under the path HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Windows NT\CurrentVersion\IniFileMapping.
  • Specify a value for that .ini file key entry that specifies a section. That is to say, an application must specify a section name, as it would appear within an .ini file or registry entry. Here is an example: [My Section].
  • For system files, specify SYS for an added value.
  • For application files, specify USR within the added value. Here is an example: "My Section: USR: App Name\Section". And, since USR indicates a mapping under HKEY_CURRENT_USER, the application should also create a key under HKEY_CURRENT_USER that specifies the application name listed in the added value. For the example just given, that would be "App Name".
  • After following the preceding steps, an application setup program should call WritePrivateProfileString with the first three parameters set to NULL, and the fourth parameter set to the INI file name. For example:

    WritePrivateProfileString( NULL, NULL, NULL, L"appname.ini" );

  • Such a call causes the mapping of an .ini file to the registry to take effect before the next system reboot. The system rereads the mapping information into shared memory. A user will not have to reboot their computer after installing an application in order to have future invocations of the application see the mapping of the .ini file to the registry.

Examples

The following sample code illustrates the preceding guidelines and is based on several assumptions:

  • There is an application named App Name.
  • That application uses an .ini file named AppName.ini.
  • There is a section in the .ini file that we want to look like this:
[Section1] FirstKey = It all worked out okay. SecondKey = By golly, it works. ThirdKey = Another test.
  • The user will not have to reboot the system in order to have future invocations of the application see the mapping of the .ini file to the registry.
#include <windows.h>
#include <tchar.h>
#include <stdio.h> int main()
{ TCHAR   inBuf[80]; HKEY   hKey1, hKey2; DWORD  dwDisposition; LONG   lRetCode; TCHAR   szData[] = TEXT("USR:App Name\\Section1");// Create the .ini file key. lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\IniFileMapping\\appname.ini"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey1, &dwDisposition); if (lRetCode != ERROR_SUCCESS){ printf ("Error in creating appname.ini key (%d).\n", lRetCode); return (0) ; } // Set a section value lRetCode = RegSetValueEx ( hKey1, TEXT("Section1"), 0, REG_SZ, (BYTE *)szData, sizeof(szData)); if (lRetCode != ERROR_SUCCESS) { printf ("Error in setting Section1 value\n"); // Close the keylRetCode = RegCloseKey( hKey1 );if( lRetCode != ERROR_SUCCESS ){printf("Error in RegCloseKey (%d).\n", lRetCode);return (0) ; }} // Create an App Name key lRetCode = RegCreateKeyEx ( HKEY_CURRENT_USER, TEXT("App Name"), 0, NULL, REG_OPTION_NON_VOLATILE,KEY_WRITE, NULL, &hKey2, &dwDisposition); if (lRetCode != ERROR_SUCCESS) { printf ("Error in creating App Name key (%d).\n", lRetCode); // Close the keylRetCode = RegCloseKey( hKey2 );if( lRetCode != ERROR_SUCCESS ){printf("Error in RegCloseKey (%d).\n", lRetCode);return (0) ; }} // Force the system to read the mapping into shared memory // so that future invocations of the application will see it // without the user having to reboot the system WritePrivateProfileStringW( NULL, NULL, NULL, L"appname.ini" ); // Write some added values WritePrivateProfileString (TEXT("Section1"), TEXT("FirstKey"), TEXT("It all worked out OK."), TEXT("appname.ini")); WritePrivateProfileString (TEXT("Section1"), TEXT("SecondKey"), TEXT("By golly, it works!"), TEXT("appname.ini")); WritePrivateProfileString (TEXT("Section1"), TEXT("ThirdKey"), TEXT("Another test..."), TEXT("appname.ini")); // Test GetPrivateProfileString (TEXT("Section1"), TEXT("FirstKey"), TEXT("Error: GPPS failed"), inBuf, 80, TEXT("appname.ini")); _tprintf (TEXT("Key: %s\n"), inBuf); // Close the keyslRetCode = RegCloseKey( hKey1 );if( lRetCode != ERROR_SUCCESS ){printf("Error in RegCloseKey (%d).\n", lRetCode);return(0);}lRetCode = RegCloseKey( hKey2 );if( lRetCode != ERROR_SUCCESS ){printf("Error in RegCloseKey (%d).\n", lRetCode);return(0);}return(1);
}

Requirements

TABLE 1
   
Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]
Target Platform Windows
Header winbase.h (include Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

See also

GetPrivateProfileString

WriteProfileString

[msdn] WritePrivateProfileString 写入配置文件相关推荐

  1. python读取配置文件存在某配置_Python读取配置文件(config.ini)以及写入配置文件

    一.读取配置文件 我的目录如下,在config下有一个config.ini配置文件 配置文件内容# 定义config分组 [config] platformName=Android appPackag ...

  2. ConfigParser-- 读取写入配置文件

    基础读取配置文件 -read(filename)               直接读取文件内容 -sections()                      得到所有的section,并以列表的形 ...

  3. Inno Setup选择语言并写入配置文件、翻译提示信息

    制作一个支持多种语言的安装包,应当具备以下几种能力: 读取系统语言设置,并作为启动时的默认语言 可选择安装的语言,随后显示对应语言的的安装提示语 将选择的语言写入到配置文件,以供程序运行时进行判断 对 ...

  4. Java读取和写入配置文件Properties

    Java读取和写入配置文件Properties 假如项目有一个配置文件my.properties,里面的初始默认配置是: 现在加载并读取这些配置项,并通过上层Java代码重新设置配置项目,然后写回到m ...

  5. 【代码审计】MIPCMS 远程写入配置文件Getshell

    0x00 环境准备 MIPCMS官网:https://www.mipcms.cn 网站源码版本:MIPCMS内容管理系统 V3.1.0(发布时间:2018-01-01) 程序源码下载:http://w ...

  6. Windows 2012R2 applicationhost.config无法写入配置文件

    applicationhost.config无法写入配置文件 applicationhost.config错误:无法写入配置文件如图错误: 以下为解决办法: 我服务器出现这个原因是因为:磁盘满了 以下 ...

  7. IIS不能对网站添加默认文档(由于权限不足而无法写入配置文件)

    在对网站添加默认文档时提示"由于权限不足而无法写入配置文件". 其实这不是权限不足造成的,而是网站的配置文件属性是"只读"造成的. 右击网站配置文件--属性-- ...

  8. php将配置信息写入文件,Php写入配置文件的经典漏洞

    phithon师父在小蜜圈里放了一个经典的配置文件写入问题漏洞. if(!isset($_GET['option'])) die(); $str = addslashes($_GET['option' ...

  9. python读取与写入配置文件

    配置文件一般后缀可以是.ini 或是 .config 比如文件名为 base_parameter.config [Cargo] get_time=1 show_warnings = False get ...

最新文章

  1. 安全获取QueryString的值类库下载
  2. html读取csv文件,javaScript读取.csv文件或.xlsx文件
  3. PS:将webp后缀图片最简单最快速的方法另存为png后缀的图片
  4. 数据链路层(学习笔记)
  5. c#查找列表指定元素的索引_在集合的指定索引处插入元素 在C#中
  6. linux下tmpfs文件系统简介
  7. 在此服务上找不到此服务_windows无法连接到服务,此问题阻止标准用户登录,怎么办?...
  8. NYOJ65 - 另一种阶乘问题
  9. 函授计算机在线考试答案,函授大学计算机基础期末考试试题及答案.doc
  10. 九九乘法表(c语言)
  11. 论坛.newreply.php,discuz!论坛帖、删帖加减金钱值后台设定For D25sp1 4.3日整理版
  12. 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(三)
  13. 如何通过抓包来获取数据API
  14. 配置消息推送服务器,自动化部署和消息推送
  15. 郑州机电工程学校计算机部,郑州机电工程学校
  16. Jvisualvm监控远程weblogic服务
  17. GZIP文件格式简介
  18. 试试这2个流动图片制作方法让你的图片动起来吧
  19. 百度文库文档(文字和图片)
  20. nodejs+express+mysql实现图片上传

热门文章

  1. 西门子医疗2019第四季度表现强劲,营收增长至约41亿欧元
  2. 火力全开服务器不稳定怎么办,斗龙战士火力全开无法打开怎么办 斗龙战士火力全开登录不了解决方案...
  3. 程序猿快速在线抠图神器
  4. 2月8日 维护总结(宽带、电话故障)
  5. 自动驾驶虚拟仿真测试介绍(7):MIL、SIL、PIL和HIL是个啥
  6. 李群李代数:SO(3)和SE(3)
  7. 如何在CAD中进行对齐连续标注?
  8. 智慧园区解决方案:有1000家公司的智慧园区如何实现数据化管理?
  9. java P1157 组合的输出
  10. Pr:制作快闪转场效果