用程序完成文件的關(guān)聯(lián)
發(fā)表時(shí)間:2024-06-12 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]文件關(guān)聯(lián)在程序設(shè)計(jì)中有著重要的作用,它的目的是要實(shí)現(xiàn)某種擴(kuò)展名的文件由相應(yīng)的應(yīng)用程序來打開,有許多的軟件,特別試那些媒體播放軟件,大都實(shí)現(xiàn)了文件的關(guān)聯(lián),可以想象,一個(gè)與文件相關(guān)的軟件連文件關(guān)聯(lián)就沒有做到,它還如何混下去。另外,由于一般應(yīng)用程序都有自己特定擴(kuò)展名的數(shù)據(jù)文件,這也要求軟件編制者應(yīng)在程序...
文件關(guān)聯(lián)在程序設(shè)計(jì)中有著重要的作用,它的目的是要實(shí)現(xiàn)某種擴(kuò)展名的文件由相應(yīng)的應(yīng)用程序來打開,有許多的軟件,特別試那些媒體播放軟件,大都實(shí)現(xiàn)了文件的關(guān)聯(lián),可以想象,一個(gè)與文件相關(guān)的軟件連文件關(guān)聯(lián)就沒有做到,它還如何混下去。另外,由于一般應(yīng)用程序都有自己特定擴(kuò)展名的數(shù)據(jù)文件,這也要求軟件編制者應(yīng)在程序中實(shí)現(xiàn)自動(dòng)關(guān)聯(lián)而不能由用戶手工去實(shí)現(xiàn)。那如何實(shí)現(xiàn)文件的關(guān)聯(lián)呢?實(shí)現(xiàn)文件關(guān)聯(lián)的核心是對(duì)注冊(cè)表的操作, 所有的文件關(guān)聯(lián)都在HKEY—CLASSES— ROOT 下面, 要實(shí)現(xiàn)文件關(guān)聯(lián)必須在HKEY—CLASSES—ROOT 中增加兩個(gè)鍵值,一是和文件擴(kuò)展名對(duì)應(yīng)的類型說明,二是對(duì)這種類型文件的操作所需要執(zhí)行的應(yīng)用程序。下面范例可以說明如何實(shí)現(xiàn)文件的關(guān)聯(lián),本例的功能是將用戶指定擴(kuò)展名的文件與用戶指定的應(yīng)用程序相關(guān)聯(lián),雙擊此種類型的文件時(shí)就可以由相應(yīng)的應(yīng)用程序來打開。該范例程序是用Borland C++ Builder實(shí)現(xiàn)的,部分代碼如下:
進(jìn)行文件的關(guān)聯(lián):
void __fastcall TForm1::btnAssoClick(TObject *Sender)
{
TRegistry *Reg = new TRegistry;
Reg->RootKey=HKEY_CLASSES_ROOT;
try
{
Reg->OpenKey(extDoWith(edtExt->Text),true);
Reg->WriteString("",appDoWith(edtAppPath->Text));
Reg->CloseKey();
Reg->OpenKey(appDoWith(edtAppPath->Text)+"\\shell\\open\\command",true);
Reg->WriteString("",edtAppPath->Text);
Reg->CloseKey();
}
__finally
{
delete Reg;
}
}
以上代碼實(shí)現(xiàn)了文件的關(guān)聯(lián),它用到了C++Builder提供Tregistry組件,它提供了許多用于操作注冊(cè)表的方法,如:OpenKey打開注冊(cè)表的某個(gè)鍵,WriteString往注冊(cè)表了寫值等,這就避免了去使用比較麻煩的RegCreateKey、RegSetValue等Win32API來完成同樣的功能。 而extDoWith(),appDoWith()分別為自定義的函數(shù)它們的功能是設(shè)置關(guān)聯(lián)文件的擴(kuò)展名和取得應(yīng)用程序的文件名,代碼如下:
extDoWith()函數(shù):
AnsiString __fastcall TForm1::extDoWith(AnsiString str)
{
//TODO: Add your source code here
//在擴(kuò)展名前加上.符號(hào)
if (str.SubString(0,1)!=".")
{
str="."+str;
}
return str;
}
appDoWith()函數(shù):
AnsiString __fastcall TForm1::appDoWith(AnsiString appPath)
{
//TODO: Add your source code here
//取得應(yīng)用程序的文件名,不帶擴(kuò)展名
int length=appPath.Length();
int index=appPath.LastDelimiter("\\");
appPath=appPath.SubString(index+1,length-index+1);
index=appPath.LastDelimiter(".");
appPath=appPath.SubString(0,index-1);
return appPath;
}
這樣就實(shí)現(xiàn)了文件類型與應(yīng)用程序的關(guān)聯(lián),如果您對(duì)本程序感興趣的話,可以到http://www.zccfamily.com/zqget/ 網(wǎng)址下載該程序的工程文件。如果你有與我交流的想法,我的聯(lián)系方式:email:zqget@msn.com