c++ - 在 C++ 中写入注册表时出错

标签 c++ registry

我正在尝试对注册表进行一些更改,在尝试了一些其他操作后,我现在正在尝试导入一个注册表文件。我确信我做对了 - 直到我收到错误“无法导入 path\reg_file.reg:指定的文件不是注册表脚本。您只能从注册表编辑器中导入二进制注册表文件。”

我一直在导出、使用记事本编辑以及重新导入注册表文件进行测试 - 但我不知道如何从 C++ 创建它们。

我放在 reg 文件中的内容是从与我想做的事情相关的所有 HKEY_CURRENT_USER 记录中复制的(我在完成新条目应该完成的步骤后手动导出)。所以他们应该在正确的地方......

我用过

input_stream >> reg_entry; //from original file
output_stream << reg_entry; 

写入文件 - 因为它看起来不是二进制文件(并且必须根据我从注册表中读取的内容进行处理)。

我该如何进行这项工作?我找不到解决方案,老实说,注册表让我害怕。

最佳答案

您不应该使用输入和输出运算符(>> 和 <<)来读写二进制文件。请改用读写接口(interface)。

ifstream fin("1.reg", ios::in|ios_base::binary);
ofstream fout("2.reg", ios::out|ios_base::binary);

if (fin.is_open() && fout.is_open())
{
    fin.seekg(0, ios::end);
    size_t len = fin.tellg();
    if (0 != len)
    {
        fin.seekg(0, ios::beg);    

        char* buf = new char[len];        
        fin.read(buf, len);        

        // Change the content here

        fout.write(buf, len);

        delete []buf;
    }
}

fin.close();
fout.close();

关于c++ - 在 C++ 中写入注册表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025865/

相关文章:

c++ - Makefile 的编译给出 'ld returned, DSO missing' 错误

c# - 未创建注册表项

c - NT 注册表句柄行为

c++ - 将迭代器转换为一对对象

c++ - 如何在不使用数组的情况下返回输入的最低值

C++:在按 ENTER 之前读取字符

c++ - 使用CanFestival的CanOpen同时进行多个药膏

windows - CMD/Batch/Registry - 字符串替换没有按预期工作?

C - RegQueryValueEx 有时在发布版本中

visual-studio - 如果不在管理员模式下运行,则无法从注册表中读取 - HKEY_CLASSES_ROOT