2012-06-14 46 views
0

我想對註冊表進行一些更改,並嘗試了一些其他的事情後,我現在試圖導入註冊表文件。我確信我做得很對 - 直到出現錯誤「無法導入路徑\ reg_file.reg:指定的文件不是註冊表腳本,只能從註冊表編輯器中導入二進制註冊表文件。」錯誤寫入註冊表在c + +

我一直在導出,用記事本編輯,並重新導入註冊表文件來測試 - 但我不知道如何從C++創建它們。

我放置在reg文件中的內容是從所有與我想要做的事情相關的所有HKEY_CURRENT_USER記錄中複製的(在我通過手動完成新條目應該完成的步驟後,我將其導出)。因此,他們應該在正確的地方...

我用

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

寫的文件 - 因爲它看起來並不二進制(和必須處理基於我從註冊表中讀取) 。

我該如何做這項工作?我找不到解決方案,說實話,註冊表讓我害怕。

+1

你看了[文件格式](http://support.microsoft.com/kb/310516)? –

+3

http://stackoverflow.com/questions/863991/using-c-to-edit-the-registry – Anthony

+0

@JerryCoffin我沒有錯過文件末尾的額外空白行,謝謝。 – Thalia

回答

2

您不應該使用輸入和輸出操作符(>>和<)來讀取二進制文件&。改爲使用讀取&寫入接口。

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();