C 操作登錄檔例項(包括判斷路徑是否存在)

2021-06-06 08:14:27 字數 3312 閱讀 9796

在應用程式安裝時, 常常需要利用登錄檔來登記應用程式的名稱 、執行路徑、 使用者對應用程式的配置資訊等 。許多應用程式在執行時也常常需要訪問登錄檔。

.net 框架結構在 microsoft.win32 名字空間內提供了兩個類用於登錄檔操作:registry 和registrykey 。這兩個類都是密封類, 不允許被其它類繼承。

registry 類中提供了 7 個公有的靜態域 ,分別代表 windows 登錄檔中的 7 個基本主鍵 。它們是:

registry.classesroot  對應於 hkey_classes_root 主鍵。

registry.currentuser  對應於 hkey_current_user 主鍵。

registry.localmachine  對應於 hkey_ local_machine 主鍵。

registry.users  對應於 hkey_users 主鍵。

registry.currentconfig  對應於 hkey_current_config 主鍵

registry.dyndta  對應於 hkey_dyn_data 主鍵

registry.performancedata  對應於 hkey_ performance_data 主鍵

registrykey類中封裝了對 windows 登錄檔的基本操作。 對登錄檔的操作必須符合系統提供的許可權 ,否則不能完成指定的操作, 程式將丟擲乙個異常。

建立子鍵

建立子鍵的成員方法的原型為:

c#**

public registrykey createsubkey(string subkey);  

其中 ,引數 subkey 表示要建立的子鍵的名字或子鍵的全路徑名 。如果建立成功,返回值就是被建立的子鍵 ,否則為null。

開啟子鍵

開啟子鍵的成員方法原型為:

c#**

public registrykey opensubkey(string name);   

public registrykey opensubkey(string name, bool writable);  

name 引數表示要開啟的子鍵名稱或全路徑名 ,writable 引數表示被開啟的主鍵是否可以被修改。第乙個方法對開啟的子鍵預設是唯讀的, 如果希望對開啟的主鍵進行寫操作 ,使用第二個方法 並把writable引數值設為true。命名空間 microsoft.win32 中還為我們提供了另乙個方法 ,用於開啟遠端機器上的登錄檔進行操作 。方法原型為:

c++**

public static registrykey openremotebasekey( registryhive hkey, string machinename);  

刪除子鍵

deletesubkey方法用於刪除指定的子鍵 ,方法原型為:

c#**

public void deletesubkey (string subkey);  

使用 deletesubkey 方法時,如果子鍵之中還包含子鍵 ,則刪除失敗 ,並返回乙個異常。 如果要徹底刪除子鍵目錄,即刪除子鍵以及子鍵以下的全部子鍵,可以使用deletesubkeytree方法 。該方法原型為:

c#**

public void deletesubkeytree(string subkey);  

讀取鍵值

讀鍵的方法原型為:

c#**

public object getvalue(string name);   

public object getvalue(string name, object defaultvalue);  

name 引數表示鍵的名稱, 返回型別是乙個 object 型別。 如果方法中指定的鍵不存在 ,則方法返回乙個 null。 我們在使用 getvalue 方法時, 可以不必關心該鍵的值型別究竟是字串 、二進位制還是dword型別, 只要使用正確的返回型別就可以了。 比如,我們希望讀取乙個字串型別的鍵值, **就可以這樣寫:

c#**

string s_value = key.getvalue(「type」);  

其中key表示乙個主鍵。如果不確定鍵值是否存在 ,而又不希望得到乙個 null 返回值, 那就使用第二個方法getvalue(string name, object defaultvalue), 其中的引數defaultvalue表示預設的返回值 。如果讀取失敗, 返回值就是傳遞給引數defaultvalue的值。

設定鍵值

設定鍵值的方法原型為:

c#**

public void setvalue(string name, object value);  

同樣 ,我們在使用該方法修改鍵值時,不用費心去分辨究竟該傳遞哪種值型別,方法將會識別是哪種型別, 並把相應型別的值賦予指定的鍵。

1.讀取指定名稱的登錄檔的值

c#**

private string getregistdata(string name)   

以上是讀取的登錄檔中hkey_local_machine\software目錄下的***目錄中名稱為name的登錄檔值;

2.向登錄檔中寫資料

c#**

private void wtregedit(string name,string tovalue)   

以上是在登錄檔中hkey_local_machine\software目錄下新建***目錄並在此目錄下建立名稱為name值為tovalue的登錄檔項;

3.刪除登錄檔中指定的登錄檔項

c#**

private void deleteregist(string name)   

}   

以上是在登錄檔中hkey_local_machine\software目錄下***目錄中刪除名稱為name登錄檔項;

4.判斷指定登錄檔項是否存在

c#**

private bool isregeditexit(string name)   

}   

}   

catch  

return _exit;   

}   

以上是在登錄檔中hkey_local_machine\software目錄下***目錄中判斷名稱為name登錄檔項是否存在,這一方法在刪除登錄檔時已經存在,在新建一登錄檔項時也應有相應判斷;

乙個例子:

c#**

using microsoft.win32;   

using system.diagnostics;   

private void access_registry()   

以上內容**自(cnode.cn)詳細出處請參考:

登錄檔操作例項

using system using microsoft.win32 subpath software microsoft windows currentversion policies explorer string separatorchar char separator separatorch...

C語言登錄檔操作例項

c語言登錄檔操作例項 例子1 include include int main void else char modlepath 256 char syspath 256 getmodulefilename 0,modlepath,256 取得程式名字 getsystemdirectory sysp...

C語言登錄檔操作例項

例子1 include include int main void else char modlepath 256 char syspath 256 getmodulefilename 0,modlepath,256 取得程式名字 getsystemdirectory syspath,256 ret...