c++判断硬盘是否连接、修改指定盘符、读取配置文件、获取exe路径

22 篇文章 2 订阅

系统: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:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值