1. 程式人生 > >c++判斷硬碟是否連線、修改指定碟符、讀取配置檔案、獲取exe路徑

c++判斷硬碟是否連線、修改指定碟符、讀取配置檔案、獲取exe路徑

系統:win7 64

編譯器:vs2010 mfc對話方塊程式。

工程名:fixde  

語言:c++

涉及函式:

GetPrivateProfileString 讀取配置檔案內容,型別為string

GetDriveType 獲取某驅動器狀態

GetVolumeNameForVolumeMountPoint 儲存某驅動器的資訊

DeleteVolumeMountPoint 刪除某驅動器的碟符號

SetVolumeMountPoint 給刪除掉碟符的驅動器設定新的碟符名

工程實現:

1.判斷系統是否插入了某盤。

2.獲取exe所在路徑。

3.讀取配置檔案ini的內容。

4.修改系統的碟符為我們想要設定的名稱。

該對話方塊工程新增的全域性變數有點多,如果會的人直接看重點。具體關鍵程式碼如下。

如果是程式設計老手,可以直接看下面的函式,如果是新手,工程下載地址:http://download.csdn.net/download/i_likechard/9887618   

除此之外,有個尷尬的問題,在下載的工程裡面第二步中的程式碼(讀取配置檔案中的內容,判斷某碟符連線狀態)和下面的不一樣。由於上傳之後的檔案無法修改了。下載後將下面第二步的程式碼修改為和本文中一樣的就可以在邏輯上正常運行了。

第一步:.h檔案中新增

public:
    CStatic m_static1;     //資原始檔中新增的Static控制元件變數。
    CString str;       //此字串用於儲存提示資訊。
    CString modifydrive;//待修改的碟符名。
    CString aimmodifydrive;
    //CString vn;
    CEdit m_edit;
    afx_msg void OnBnClickedOk();
    CButton m_button;
    TCHAR vn[MAX_PATH];

第二步:.cpp檔案中的OnInitDialog()函式中中新增以下程式碼

//獲取配置檔案路徑,由於config.ini配置檔案放置於exe所在目錄下,所以利用獲取exe路徑後新增path+“config.ini”獲取到配置檔案路徑。

CString   path=AfxGetApp()->m_pszHelpFilePath;   
CString   str=AfxGetApp()->m_pszExeName;   
path=path.Left(path.GetLength()-str.GetLength()-4);  
m_button.EnableWindow(FALSE);      //修改碟符的button控制元件初始化為不可用。

//讀取配置檔案中的內容,到區域性變數中。
char chdrive1[16]= {0};
GetPrivateProfileStringA("修改後碟符號","aimmodifydrive1","D:",chdrive1,16,path+"config.ini"); //獲取配置檔案中的內容。第三個引數為預設值,當無法讀取到配置檔案時,或者配置檔案中該項未設定時,預設值。
aimmodifydrive=chdrive1;//將獲取到的內容,保存於string型別中。
char chdrive2[16]= {0};
GetPrivateProfileStringA("待修改碟符號","modifydrive1","E:",chdrive2,16,path+"config.ini"); //獲取配置檔案中的內容。第三個引數為預設值,當無法讀取到配置檔案時,或者配置檔案中該項未設定時,預設值。
modifydrive=chdrive2; //將獲取到的內容,保存於string型別中。

if (GetDriveType(aimmodifydrive) == DRIVE_NO_ROOT_DIR)  //判斷D是否存在。
{
    str=aimmodifydrive+"盤不存在 \n";
    m_edit.SetWindowTextA(str);
    if (GetDriveType(modifydrive) == DRIVE_NO_ROOT_DIR) //判斷E是否存在。
    {
        str+=modifydrive+"盤不存在 \n";
        m_edit.SetWindowTextA(str);
    }
    else 
    {
        str+=modifydrive+"盤存在 \n";
        m_edit.SetWindowTextA(str);
        m_button.EnableWindow(TRUE);
    }
}
else
{
    str=aimmodifydrive+"盤存在,硬碟連線正常 \n";
    m_edit.SetWindowTextA(str); //控制元件顯示提示內容。
}

第三部:編寫修改碟符的函式。

void CfixdeDlg::OnBnClickedOk()
{
// TODO: 在此新增控制元件通知處理程式程式碼
    GetVolumeNameForVolumeMountPoint( TEXT(modifydrive+"\\"), vn, _countof(vn) );    //儲存待修改碟符的資訊
    DeleteVolumeMountPoint( TEXT(modifydrive+"\\") );//刪除此碟符的名稱
    SetVolumeMountPoint( TEXT(aimmodifydrive+"\\"), vn );//設定此碟符為我們需要的碟符名。
    str+="碟符修改完畢 \n";
    m_edit.SetWindowTextA(str);//static控制元件顯示提示資訊。
    m_button.EnableWindow(FALSE);//修改完成後,將改函式控制元件設定為不可用,防止再次執行導致的邏輯錯誤。
    return ;
}

第五部:配置檔案config.ini中的內容

[待修改碟符號]
modifydrive1 = Z: 

[修改後碟符號]
aimmodifydrive1=H: