WritePrivateProfileString

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


...全文
408 21 打赏 收藏 转发到动态 举报
写回复
用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文件名.
傻X 2012-10-09
  • 打赏
  • 举报
回复
另外别忘记 "\\"转义符
enola_paco 2012-10-09
  • 打赏
  • 举报
回复
最后一个是文件名(完整路径),如D:\test\1.ini,一般是获得应用程序路径(path+\\1.ini)
傻X 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,也没有,那还有哪里?

16,472

社区成员

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

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

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