首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大数据量注册表操作,该如何处理

2012-02-27 
大数据量注册表操作大数据量注册表操作TZ们,我遇到了一个非常非常非常非常棘手的问题,就是想往注册表里面

大数据量注册表操作
大数据量注册表操作


TZ们,我遇到了一个非常非常非常非常棘手的问题,就是想往注册表里面导入30MB+的数据,用.reg、reg.exe、RegSetValue都不行,谁能帮帮我啊?不知道用什么函数才行。
代码:

C/C++ code
#include <Windows.h>#include <iostream>using namespace std;int main(void){    const char* SubKeyName = "Software\\Thunisoft\\Unispim\\6.6";    const char* ValueName = "Config";    char TempValue[39488];                      //39488是文件大小    FILE* File;    HKEY hKey;    long t;    DWORD dw;        if( (File=fopen("REGDAT.DAT","rb"))==NULL)  //REGDAT.DAT是数据文件    {        cout << "Error: OpenFile" << endl;        return -1;    }        if( (t=fread((void*)&TempValue,1,39488,File))!=39488)    {        cout << "Error: ReadFile" << endl;        cout << "Returned: " << t << endl;        fclose(File);        return -1;    }        fclose(File);        if( RegCreateKeyEx(HKEY_CURRENT_USER, SubKeyName, 0, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &hKey, &dw)!=ERROR_SUCCESS )    {        cout << "Error: CreateKey" << endl;        return -1;    }            RegCloseKey( hKey );        if( RegOpenKeyEx(HKEY_CURRENT_USER, SubKeyName, 0, KEY_QUERY_VALUE|KEY_SET_VALUE, &hKey)!=ERROR_SUCCESS )    {        cout << "Error: OpenKey" << endl;        return -1;    }        if( RegSetValueEx(hKey, ValueName, 0, REG_BINARY,(const BYTE*)TempValue , 39489) != ERROR_SUCCESS )    {        cout << "Error: RegSetValueEX" << endl;        RegCloseKey( hKey );        return -1;    }        RegCloseKey( hKey );    cout << "Succeeded!" << endl;    system("pause>nul");    return 0;}



PS:谁有有关输入法一块的API资料,发一份。
PS2:WinSock资料……同上
PS3:我的邮箱

[解决办法]
为什么要这么做啊?
[解决办法]
出现的什么错误?up
[解决办法]
探讨

怎么给分啊?

[解决办法]
探讨
引用:

出现的什么错误?up

没错误,SetValue后返回值也是Succeed,但从注册表编辑器里看发现根本没效果


把39488改成1024就能写入前1024Bytes
紫光输入法的配置项大得惊人……34Mb还不放文件里……

[解决办法]
意图不明..
[解决办法]
注册表是个非常糟糕的设计,把大量数据存储进注册表,是脑残行为
[解决办法]
探讨
没办法,紫光开发者就是这么脑残……
我只有用的份

[解决办法]
探讨
大家有没有可以用Appand方式写注册表的方法a?
PS:我如果选无满意答案结贴,会不会遭BS啊?

[解决办法]
不知道你的工作是不是有这种必要
但可以通过编写一个直接操作HIVE文件的接口来实现大规模的注册表修改。
或者看看紫光输入法怎么做的
[解决办法]
注册表编辑器并不可靠,它不是所有的值都能看到
你可以自己query下看有没有成功
[解决办法]
不知道楼主的问题解决了没有,其实注册表放30M+的东西完全没有问题。当然要用点小技巧了,可以把文件分割后保存在注册表的不同键名下,并且记录文件分割的序号,以便今后将注册表中分割的文件完整地还原。
[解决办法]


先生成一个c:\\30M.reg文件
然后
system("regedit.exe /s c:\\30M.reg");
_unlink("c:\\30M.reg");

热点排行