VC++(十二)文件和注冊表操作

  • const char***
    指向常量的指針,不能修改其指向的內(nèi)存中的內(nèi)容。但可以修改其所指向的內(nèi)存地址笨忌。指針變量是可以修改的蓝仲,而其指向的對象被看做是常量,不能夠被修改官疲。
    定義函數(shù)時袱结,如果想利用指針類型來傳遞參數(shù),通常將形參聲明為const char*類型途凫,這樣就不能利用形參來修改指針所指向的內(nèi)容垢夹,從而保證了數(shù)據(jù)的一致性。

  • char* const
    指針常量维费,必須在其定義的同時賦值棚饵。指針常量表示指針本身是常量煤裙。其值不能修改。但其所指向的內(nèi)容是可以修改的噪漾。

  • C語言對文件操作的支持

文件的打開
FILE *fopen(const char *filename,const char *type); 
文件的寫入
size_t fwrite(
   const void *buffer,
   size_t size,
   size_t count,
   FILE *stream 
);
int main()  
{  
    FILE *pFile = fopen("1.txt","w");  
    fwrite("hello,world!",1,strlen("hello,world!"),pFile);  
    return 0;  
}  
執(zhí)行完pFile后硼砰,產(chǎn)生一個名為“1.txt”的文件(大小為0)
執(zhí)行完fwrite后,大小還是為0
當程序完全運行完以后欣硼,hello,world!才會被寫入文件题翰。

C語言對文件的操作使用了緩沖文件系統(tǒng):為每個正在使用的文件開辟了一段內(nèi)存(緩沖區(qū)域),當我們向硬盤上寫數(shù)據(jù)時诈胜,是先寫到內(nèi)存里的(緩沖區(qū)域)豹障,直到內(nèi)存(緩沖區(qū)域)滿了,或者是我們通知系統(tǒng)要關(guān)閉這個文件了焦匈,才把內(nèi)存里的數(shù)據(jù)拷貝到硬盤上血公。why?因為內(nèi)存之間的操作速度要遠遠快于內(nèi)存到硬盤的速度。

文件的關(guān)閉
int fclose(FILE *stream); 

fflush()
The fflush function flushes a stream. If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.

將ch數(shù)組全部設(shè)置為0
char ch[100]
memset(ch,0,100)

void rewind(
   FILE *stream 
);
Repositions the file pointer to the beginning of a file.

以文本方式和二進制方式讀取文件是有明顯的區(qū)別的
當按照文本方式向文件中寫入數(shù)據(jù)時缓熟,一旦遇到換行符(ASCII碼為10)累魔,則會轉(zhuǎn)換為回車-換行(ASCII碼分別為13,10)。
讀取文件時够滑,一旦遇到回車-換行的組合(連續(xù)的ASCII碼為13,10)垦写,則會轉(zhuǎn)換為換行字符。

  • 當按照二進制方式向文件中寫入數(shù)據(jù)時彰触,則會將數(shù)據(jù)在內(nèi)存中的存儲形式原樣輸出到文件中梯投。

  • 基于Intel的機器在存儲器中按照從最低字節(jié)到最高字節(jié)的順序存儲對象。
    如果直接以文本的方式寫進文件一個整數(shù)况毅。則打開是亂碼的分蓖。
    用二進制方式打開可以看見這個整數(shù)的16進制字符,4個字節(jié)尔许。
    因為這四個字節(jié)的轉(zhuǎn)換成字符之后是不可讀的咆疗,因此看到的就是亂碼。

  • Win.ini早期的一些程序?qū)⒊跏蓟畔懭氲絎in.ini文件中
    win.ini母债,是Windows系統(tǒng)的一個基本系統(tǒng)配置文件。WIN.INI文件包含若干小節(jié)尝抖,每一節(jié)由一組相關(guān)的設(shè)定組成毡们。文件配保存了諸如影響Windows操作環(huán)境的部分、控制系統(tǒng)界面顯示形式及窗口和鼠標器的位置昧辽、聯(lián)結(jié)特定的文件類型與相應(yīng)的應(yīng)用程序衙熔、列出有關(guān)HELP窗口及對話窗的默認尺寸、布局搅荞、文本顏色設(shè)置等等的選項红氯。是系統(tǒng)配置不可缺少的文件框咙。

  • 注冊表的編程
    注冊表存儲在二進制文件中。
    注冊表是Windows操作系統(tǒng)的核心數(shù)據(jù)庫痢甘,存放著各種參數(shù)喇嘱,直接控制著Windows的啟動、硬件驅(qū)動程序的裝載以及一些Windows應(yīng)用程序的運行塞栅≌咄可以說是Windows的神經(jīng)中樞。

  • 在Windows 3.x操作系統(tǒng)中放椰,注冊表是一個極小文件作烟,其文件名為Reg.dat,里面只存放了某些文件類型的應(yīng)用程序關(guān)聯(lián)砾医,大部分的設(shè)置放在Win.ini拿撩、System.ini等多個初始化INI文件中。由于這些初始化文件不便于管理和維護如蚜,時常出現(xiàn)一些因INI文件遭到破壞而導(dǎo)致系統(tǒng)無法的啟動的問題压恒。為了使系統(tǒng)運行得更為穩(wěn)定、健壯怖亭,Windows 95/98設(shè)計師們借用了Windows NT中的注冊表的思想涎显,將注冊表引入到Windows 95/98操作系統(tǒng)中,而且將INI文件中的大部分設(shè)置也移植到注冊表中兴猩,因此期吓,注冊表在Windows 95/98操作系統(tǒng)的啟動、運行過程中起著重要的作用倾芝。

  • 注冊表顧名思義是注冊文件,當你在電腦里進行某一操作的時候,都會寫入注冊表,用以記錄.它還有作用就是控制硬件軟件等,比如你可以在注冊表里調(diào)整BIOS和 2級緩存,修改參數(shù)等

  • 注冊表的結(jié)構(gòu)劃分及相互關(guān)系
    注冊表的根鍵共六個讨勤。這些根鍵都是大寫的,并以HKEY_為前綴;這種命令約定是以Win32 API的Registry函數(shù)的關(guān)鍵字的符號變量為基礎(chǔ)的。

HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分晨另。
而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分潭千。
HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的信息。在每次系統(tǒng)啟動后借尿,系統(tǒng)就映射出HKEY_CURRENT_USER中的信息刨晴,使得用戶可以查看和編輯其中的信息。
實際上路翻,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT狈癞,為了用戶便于查看和編輯,系統(tǒng)專門把它作為一個根鍵茂契。同理蝶桶,HKEY_CURRENT_CONFIG\SY-STEM\Current Control就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。
HKEY_USERS中保存了默認用戶和當前登錄用戶的用戶信息掉冶。HKEY_CURRENT_USER中保存了當前登錄用戶的用戶信息真竖。
HKEY_DYN_DATA保存了系統(tǒng)運行時的動態(tài)數(shù)據(jù)脐雪,它反映出系統(tǒng)的當前狀態(tài),在每次運行時都是不一樣的恢共,即便是在同一臺機器上战秋。
根據(jù)上面的分析,注冊表中的信息可以分為HKEY_LOCAL_MACHINE和HKEY_USERS兩大類旁振,這兩大類的詳細內(nèi)容請看后面的介紹获询。

1.HKEY_USERS
該根鍵保存了存放在本地計算機口令列表中的用戶標識和密碼列表。每個用戶的預(yù)配置信息都存儲在HKEY_USERS根鍵中拐袜。HKEY_USERS是遠程計算機中訪問的根鍵之一吉嚣。
2.HKEY_CURRENT_USER
該根鍵包含本地工作站中存放的當前登錄的用戶信息,包括用戶登錄用戶名和暫存的密碼(注:此密碼在輸入時是隱藏的)。用戶登錄Windows 98時蹬铺,其信息從HKEY_USERS中相應(yīng)的項拷貝到HKEY_CURRENT_USER中尝哆。
3.HKEY_CURRENT_CONFIG
該根鍵存放著定義當前用戶桌面配置(如顯示器等)的數(shù)據(jù),最后使用的文檔列表(MRU)和其他有關(guān)當前用戶的Windows 98中文版的安裝的信息。
4.HKEY_CLASSES_ROOT
根據(jù)在Windows 98中文版中安裝的應(yīng)用程序的擴展名,該根鍵指明其文件類型的名稱甜攀。
在第一次安裝Windows 98中文版時,RTF(Rich Text format)文件與寫字板(WordPad)&127;聯(lián)系起來,但在以后安裝了中文Word 6.0后秋泄,雙擊一個RTF文件時,將自動激活Word规阀。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT恒序,將替代WIN.INI文件中的[Extensions]&127;小節(jié)中的設(shè)置項,它把應(yīng)用程序與文件擴展名聯(lián)系起來,它也替代了Windows 3.x中的Reg.dat文件中的相似的設(shè)置項。
5.HKEY_LOCAL_MACHINE
該根鍵存放本地計算機硬件數(shù)據(jù),此根鍵下的子關(guān)鍵字包括在SYSTEM.DAT中,用來提供HKEY_LOCAL_MACHINE所需的信息,或者在遠程計算機中可訪問的一組鍵中谁撼。
6.HKEY_DYN_DATA
該根鍵存放了系統(tǒng)在運行時動態(tài)數(shù)據(jù)歧胁,此數(shù)據(jù)在每次顯示時都是變化的,因此厉碟,此根鍵下的信息沒有放在注冊表中喊巍。

  • 注冊表訪問示例
//寫注冊表操作
void CFileView::OnRegWrite() 
{
    // TODO: Add your command handler code here
    HKEY hKey;
    RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\http://www.sunxin.org\\admin",&hKey);
    RegSetValue(hKey,NULL,REG_SZ,"zhangsan",strlen("zhangsan"));
    DWORD dwAge=30;
    RegSetValueEx(hKey,"age",0,REG_DWORD,(CONST BYTE*)&dwAge,4);
    RegCloseKey(hKey);
}

在向注冊表中寫入軟件信息時,通常都是在HKEY_LOCAL_MACHINE分支下寫入的箍鼓。
DWORD類型崭参。每個Word為兩個字節(jié)的長度,DWORD雙字即4個字節(jié)款咖。
LONG類型何暮。有符號32位整數(shù)。

void CFileView::OnRegRead() 
{
    // TODO: Add your command handler code here
    LONG lValue;
    RegQueryValue(HKEY_LOCAL_MACHINE,
"Software\\http://www.sunxin.org\\admin",NULL,&lValue);
    char *pBuf=new char[lValue];
    RegQueryValue(HKEY_LOCAL_MACHINE,
"Software\\http://www.sunxin.org\\admin",pBuf,&lValue);
    MessageBox(pBuf);   

    HKEY hKey;
    RegOpenKey(HKEY_LOCAL_MACHINE,
"Software\\http://www.sunxin.org\\admin",&hKey);
    DWORD dwType;
    DWORD dwValue;
    DWORD dwAge;
    RegQueryValueEx(hKey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue);
    CString str;
    str.Format("age=%d",dwAge);
    MessageBox(str);
}

如果在調(diào)用RegQueryValue函數(shù)時铐殃,將其第三個參數(shù)設(shè)置為NULL海洼,第四個參數(shù)設(shè)置為非NULL,那么該函數(shù)將返回存儲數(shù)據(jù)的大小背稼。這樣,可以讓應(yīng)用程序確定一個最佳的方式來存儲將要獲取到的數(shù)據(jù)玻蝌,然后再去獲取數(shù)據(jù)蟹肘,也就是說词疼,程序可以根據(jù)該函數(shù)此時返回的數(shù)據(jù)長度動態(tài)分配一塊內(nèi)存,用來保存將要獲取的數(shù)據(jù)的大小帘腹,即贰盗,就可以采用這種方式,依次調(diào)用兩次RegQueryValue函數(shù)阳欲,第一次調(diào)用該函數(shù)得到將要獲取數(shù)據(jù)的長度舵盈,然后動態(tài)分配內(nèi)存,接著再次調(diào)用該函數(shù)得到數(shù)據(jù)球化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秽晚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子筒愚,更是在濱河造成了極大的恐慌赴蝇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巢掺,死亡現(xiàn)場離奇詭異句伶,居然都是意外死亡,警方通過查閱死者的電腦和手機陆淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門考余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轧苫,你說我怎么就攤上這事楚堤。” “怎么了浸剩?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵钾军,是天一觀的道長。 經(jīng)常有香客問我绢要,道長吏恭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任重罪,我火速辦了婚禮樱哼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剿配。我一直安慰自己搅幅,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布呼胚。 她就那樣靜靜地躺著茄唐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沪编,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天呼盆,我揣著相機與錄音,去河邊找鬼蚁廓。 笑死访圃,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的相嵌。 我是一名探鬼主播腿时,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饭宾!你這毒婦竟也來了批糟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤捏雌,失蹤者是張志新(化名)和其女友劉穎跃赚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體性湿,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡纬傲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肤频。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叹括。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宵荒,靈堂內(nèi)的尸體忽然破棺而出汁雷,到底是詐尸還是另有隱情,我是刑警寧澤报咳,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布侠讯,位于F島的核電站,受9級特大地震影響暑刃,放射性物質(zhì)發(fā)生泄漏厢漩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一岩臣、第九天 我趴在偏房一處隱蔽的房頂上張望溜嗜。 院中可真熱鬧,春花似錦架谎、人聲如沸炸宵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽土全。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裹匙,已是汗流浹背野哭。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幻件,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓蛔溃,卻偏偏與公主長得像绰沥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贺待,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這篇文章幾乎幾乎原封不動的搬過來了這位博主的內(nèi)容徽曲,作為自己以后查詢方便用~ reference:http://bl...
    DeamoV閱讀 20,302評論 3 33
  • 一、開始菜單啟動目錄 “開始——程序——啟動菜單“麸塞,其中的程序和快捷方式都會在系統(tǒng)啟動時自動運行秃臣。最常見的啟動位置...
    超人高飛閱讀 1,575評論 0 3
  • 注冊表是Windows操作系統(tǒng)的一個核心數(shù)據(jù)庫,記載著機子的硬件信息哪工、系統(tǒng)配置奥此、用戶配置等各種“高大上”的數(shù)據(jù)。對...
    逸之閱讀 20,703評論 14 62
  • 自從寶寶出生那一刻起,我的心就像被固定吊在半空一樣偎捎,一直懸著蠢终。每時每刻都在提心吊膽,有時茴她,甚至?xí)岩勺约菏欠竦?..
    望圓閱讀 320評論 0 0