WritePrivateProfileString

czcwzw 2012-10-09 09:22:02
调用WritePrivateProfileString时,最后一个参数不是路径,而是比如说AAA之类,
那么它到底把值写到哪里去了,我到注册表下
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
没找到,也没有生成相应ini文件.


...全文
430 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfm688 2012-10-10
  • 打赏
  • 举报
回复
都说WritePrivateProfileString只是个API函数了,m_pszProfileName是什么根本没关系

WritePrivateProfileString(TEXT("section"), TEXT("key"), TEXT("string"), TEXT("AAA.ini"));
此代码就能在%windir%里生成一个AAA.ini了;如果没有,检查此函数的返回值看看是否失败了
你可以用SDK的方式写个程序测试下
Eleven 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
m_pszProfileName就是AAA
搜索AAA也没有.
[/Quote]
WritePrivateProfileString (TEXT("Section1"),
TEXT("SecondKey"),
TEXT("By golly, it works!"),
TEXT("E:\\11.ini"));
czcwzw 2012-10-10
  • 打赏
  • 举报
回复
m_pszProfileName就是AAA
搜索AAA也没有.
czcwzw 2012-10-10
  • 打赏
  • 举报
回复
谢谢gfm688,
在%windir%我终于找到了AAA.
之前查找错了名字,囧.
非常感谢.
gfm688 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

最后一个参数不是绝对路径,而是应用程序的名称.
但是程序启动时候用SetRegistryKey(程序名称)设置了下.

另外在%SystemRoot%里也没找到相应的ini啊
[/Quote]

WritePrivateProfileString是API函数,不是CWinApp的成员函数,所以不受SetRegistryKey的影响
你检查清楚,要加上扩展名.ini才是ini,否则只是AAA
czcwzw 2012-10-09
  • 打赏
  • 举报
回复
最后一个参数不是绝对路径,而是应用程序的名称.
但是程序启动时候用SetRegistryKey(程序名称)设置了下.

另外在%SystemRoot%里也没找到相应的ini啊
yyyyy_3 2012-10-09
  • 打赏
  • 举报
回复
必须是绝对路径
gfm688 2012-10-09
  • 打赏
  • 举报
回复
如果是程序的所在目录下的ini,必须用完整路径
先用GetModuleFileName获取程序的路径,再截取程序所在目录,然后将程序所在目录和ini文件名连接起来得到完整路径
gfm688 2012-10-09
  • 打赏
  • 举报
回复
楼主问的是最后一个参数不是路径的情况
如果最后一个参数为TEXT(".\\AAA"),生成的AAA文件才是在当前工作目录下
zgdqlc 2012-10-09
  • 打赏
  • 举报
回复
生成的AAA文件在你所运行程序的目录内
gfm688 2012-10-09
  • 打赏
  • 举报
回复
If the lpFileName parameter does not contain a full path and filename 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.
gfm688 2012-10-09
  • 打赏
  • 举报
回复
在%SystemRoot%里(通常为C:\WINDOWS)

如果最后一个参数为"AAA",则在%SystemRoot%里生成一个AAA的文件
如果最后一个参数为NULL,则写到%SystemRoot%\win.ini里
raymonzhao 2012-10-09
  • 打赏
  • 举报
回复
所用的WINAPI函数原型为:
  BOOL WritePrivateProfileString(
  LPCTSTR lpAppName,
  LPCTSTR lpKeyName,
  LPCTSTR lpString,
  LPCTSTR lpFileName
  );
  其中各参数的意义
  LPCTSTR lpAppName 是INI文件中的一个字段名.
  LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
  LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
  LPCTSTR lpFileName 是完整的INI文件名.
看不见的裂痕 2012-10-09
  • 打赏
  • 举报
回复
另外别忘记 "\\"转义符
enola_paco 2012-10-09
  • 打赏
  • 举报
回复
最后一个是文件名(完整路径),如D:\test\1.ini,一般是获得应用程序路径(path+\\1.ini)
看不见的裂痕 2012-10-09
  • 打赏
  • 举报
回复
你用绝对路径去看,肯定有。

不是写注册表的。
gfm688 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

没有扩展名.ini,就直接是应用程序名称
WritePrivateProfileString(x,x,x,ExeName);这样
ExeName是应用程序名称(比如AAA),不是绝对路径.不是相对路径,这个已经相当清楚了.

反正我愣是没找到他写在哪里,注册表里,没有,
在C盘我搜索了AAA.ini,也没有,那还有哪里?
[/Quote]

ExeName是AAA的话,你应该搜索AAA,而不是AAA.ini
schlafenhamster 2012-10-09
  • 打赏
  • 举报
回复
在App: InitInstance中看看:
afxDump << m_pszProfileName << "\n";
就知道了
czcwzw 2012-10-09
  • 打赏
  • 举报
回复
没有扩展名.ini,就直接是应用程序名称
WritePrivateProfileString(x,x,x,ExeName);这样
ExeName是应用程序名称(比如AAA),不是绝对路径.不是相对路径,这个已经相当清楚了.

反正我愣是没找到他写在哪里,注册表里,没有,
在C盘我搜索了AAA.ini,也没有,那还有哪里?
VB对ini配置文件进行读写操作实例 '''''''''''''''''''''''''''''''' '**************************************************************************** '描 述:根据鼠标位置获取句柄类名 '编 程:sysdzw 收藏整理 '发布日期:2008/07/20 '博 客:http://hi.baidu.com/sysdzw 'Email :sysdzw@163.com 'QQ :171977759 '**************************************************************************** Option Explicit Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Public iniFileName As String '配置文件的名称,一般在窗体load事件中初始化 '获取Ini的值,注意DefString表示如果不存在对应的KeyWord就设置此项为DefString,为空时不处理 Function GetIniS(ByVal SectionName As String, ByVal KeyWord As String, Optional ByVal DefString As String) As String Dim ResultString As String * 144, Temp% Dim s$, i% Temp% = GetPrivateProfileString(SectionName, KeyWord, "", ResultString, 144, iniFileName) '检索关键词的值 If Temp% > 0 Then '关键词的值不为空 For i = 1 To 144 If Asc(Mid$(ResultString, i, 1)) 0 Then s = s & Mid$(ResultString, i, 1) End If Next Else Temp% = WritePrivateProfileString(SectionName, KeyWord, DefString, iniFileName) '将缺省值写入INI文件 s = DefString End If GetIniS = s End Function '写入字符串值,返回值如果是0表示操作失败 Public Function SetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValStr As String) As Boolean SetIniS = WritePrivateProfileString(SectionName, KeyWord, ValStr, iniFileName) End Function '清除 Section"段" Public Function DelIniSec(ByVal SectionName As String) As Boolean DelIniSec = WritePrivateProfileString(SectionName, 0&, "", iniFileName) End Function ''清除KeyWord"键" Public Function DelIniKey(ByVal SectionName As String, ByVal KeyWord As String) As Boolean DelIniKey = WritePrivateProfileString(SectionName, KeyWord, 0&, iniFileName) End Function '注意点: 'ini文件在有回车换行符会出错,经过测试,汉字要小于86字节, '英文要小于143字节才能返回列表框。 '使用范例: 'form_load时设置文件路径 'Private Sub Form_Load() ' iniFileName = App.Path & "\test.ini" 'End Sub ''写入 'Private Sub Command1_Click() ' MsgBox SetIniS(Text1.Text, Text2.Text, Now) 'End Sub ''获取 'Private Sub Command2_Click() ' MsgBox GetIniS(Text1.Text, Text2.Text, "fff") 'End Sub ''删除 Section 'Private Sub Command3_Click() ' MsgBox DelIniSec(Text1.Text) 'End Sub ''删除 KeyWord 'Private Sub Command4_Click() ' MsgBox DelIniKey(Text1.Text, Text2.Text) 'End Sub '''''''''''''''''''''''''''''''''''''''''''

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧