我需要一些从文件存储和获取数据的方法(在 WIN32 api c++ 应用程序中,而不是 MFC 或 .NET)
例如关闭窗口时保存窗口的 x、y、宽度和高度,并在打开窗口时加载数据。
我试过 .ini 文件,带有函数——WritePrivateProfileString 和 ReadPrivateProfileString/Int,但是在 MSDN 上它说
“提供此功能只是为了与基于 Windows 的 16 位应用程序兼容。应用程序应将初始化信息存储在注册表中。”
当我尝试在我的 Windows7 64 位机器上读取 ini 文件时,我遇到了蓝屏! (在 visual studio 的 Debug模式下)O.O
我注意到大多数其他应用程序使用 XML 来存储数据,但我不知道如何在 C++ 中读/写 xml 数据,是否有任何库或 Windows 函数允许我使用 xml 数据?
任何其他建议也很好,谢谢。
最佳答案
.ini 文件没有问题,唯一的问题是将它们写入何处。 CIniFile来自 CodeProject 的类(class)已经足够好了。 ini文件应该放在%APPDATA%/<Name Of Your Application> (或 %LOCALAPPDATA%\<Same Name Here> ,如下所述)。
编辑:如果我们谈论的是从 Windows 2000 开始的 Windows 系列操作系统,那么函数 SHGetFolderPath 是检索应存储应用程序配置文件的用户特定文件夹的可移植方式。要将数据存储在 romaing 文件夹中,请使用 CSIDL_APPDATA 和 SHGetFolderPath .要将数据存储到本地文件夹,请使用 CSIDL_LOCAL_APPDATA。
本地文件夹和漫游文件夹的区别在于要存储的数据的性质。如果数据太大或特定于机器,则将其存储在本地文件夹中。您的数据(窗口的坐标和大小)本质上是本地的(在其他机器上您可能有不同的分辨率),因此您实际上应该使用 CSIDL_LOCAL_APPDATA。
Windows Vista 及更高版本具有扩展功能 SHGetKnownFolderPath 有自己的一组常量,但如果您寻求兼容性,请坚持使用前者 SHGetFolderPath .
关于c++ - 在没有注册表的情况下存储应用程序数据/设置的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279532/
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re