2012-06-14 5 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(); 
관련 문제