2009-07-28 128 views
4

可以用最簡單的術語(我是一個偶然的程序員,缺乏最新的詳細編程知識)解釋在codegear C++(2007)中使用註冊表的最簡單方法。如何使用註冊表?

我有一個老(老!)計劃我寫的這是造成在啓動時顯著延遲一行代碼...

DLB->目錄= pIniFile-> ReadString(「選項」,」最後的目錄「,」沒有密鑰!「);

該代碼正在使用ini文件。我希望能夠使用註冊表來代替(寫入應用程序使用的最後一個目錄等變量)

但是具體情況並不重要。我只是想了解如何使用特定於codegear C++ builder的註冊表。

我已經使用了這個,但像往常一樣這種類型的東西,我得到了很多關於C++ builder的網頁和關於windows註冊表的幾頁,但沒有解釋如何與其他頁面一起使用的頁面。

回答

10

使用TRegistry類...(包括registry.hpp)

//Untested, but something like... 
TRegistry *reg = new TRegistry; 
reg->RootKey = HKEY_CURRENT_USER; // Or whatever root you want to use 
reg->OpenKey("theKey",true); 
reg->ReadString("theParam",defaultValue); 
reg->CloseKey(); 

注意,打開和讀取一個INI文件通常是相當快,所以也許你需要測試你的假設是閱讀ini實際上是您的問題,我不認爲只是從註冊表中獲取您的目錄名稱,而是要解決您的問題。

+0

請注意,對於「theKey」,您需要確保使用轉義反斜槓。例如`SOFTWARE \\ \\的一些路徑\\爲\\ key` – 2013-05-23 15:27:21

1

請參閱Qt 4.5 libraryQSettings類文檔。它將允許您輕鬆地以跨平臺的方式加載和存儲程序的配置設置。 Windows實現使用Windows註冊表來加載和存儲程序的配置數據。在其他平臺上,將使用平臺首選的用於存儲配置數據的本地機制。這比直接與Windows註冊表交互要好得多,因爲你不會被綁定到特定的平臺。

2

蒂姆是正確的,但使用更簡單的類是TIniRegFile,但它也可以做更多的限制。

3

附上Registry.hpp文件:

#include <Registry.hpp> 

那麼你有什麼功能,你可以寫下面的讀取值:

String __fastcall ReadRegistryString(const String &key, const String &name, 
    const String &def) 
{ 
    TRegistry *reg = new TRegistry(); 
    String result; 

    try { 
     reg->RootKey = HKEY_CURRENT_USER; 

     if (reg->OpenKeyReadOnly(key)) { 
      result = reg->ReadString(name, def); 
      reg->CloseKey(); 
     } 
    } 
    __finally { 
     delete reg; 
    } 

    return result; 
} 

所以讀取值應該是一樣容易爲:

ShowMessage(ReadRegistryString("Options", "Last Directory", "none")); 

您可以使用以下值來寫入數值:

void __fastcall WriteRegistryString(const String &key, const String &name, 
    const String &value) 
{ 
    TRegistry *reg = new TRegistry(); 

    try { 
     reg->RootKey = HKEY_CURRENT_USER; 

     if (reg->OpenKey(key, true)) { 
      reg->WriteString(name, value); 
      reg->CloseKey(); 
     } 
    } 
    __finally { 
     delete reg; 
    } 
} 

應該自我解釋,記住這個try ... finally在使用VCL TRegistry類時實際上是非常有用的。

編輯

我聽說.ini文件存儲在Windows註冊表,所以如果你想要的INI文件的速度優勢,你應該叫他們別的東西 - 等。cfg

這是我從一個雖然可靠的來源聽到的,我沒有自己測試過。

相關問題