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

2023-10-29

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • C++,多语言/本地化支持

    向 C 程序添加多语言支持的最佳方法是什么 如果可能 应该从包含键值对 WelcomeMessage Hello s 之类的纯文本文件中读取语言 我想到了添加一个 localizedString key 函数来返回加载的语言文件的字符串 有
  • TCP客户端;网络流;异步读取; C#

    请原谅我对任务和异步缺乏了解 使用 TcpClient 类 我正在创建与可用服务器的连接 void async RunClientAsync TcpClient client new TcpClient try await client C
  • 委托和接口如何互换使用?

    我可以使用接口方法代替委托吗 如何 我发现搜索接口方法比使用委托更快 我希望有一个简单的代码片段 理论上 可以通过包含单个方法的接口 例如 Java 没有委托 来完成委托完成的所有工作 然而 它使代码变得更加冗长并且没有带来什么好处 话又说
  • OpenGL,如何独立旋转对象?

    到目前为止我的代码 void display void glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear Screen And Depth Buffer glLoadIdentity
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • 析构函数、dispose 和 Finalize 方法之间的区别

    我正在研究垃圾收集器在 C 中的工作原理 我对使用感到困惑Destructor Dispose and Finalize方法 根据我的研究和理解 在我的类中拥有析构函数方法将告诉垃圾收集器以析构函数方法中提到的方式执行垃圾收集 该方法不能在
  • 如何使用 DesignData 帮助开发 Metro 应用程序?

    我一直在 Windows Phone 应用程序中愉快地使用 DesignData 我希望使用它来帮助在 VS2012 Blend for VS 中的 Metro 风格应用程序中可视化设计 我已经尝试过希望显而易见的方法
  • 有没有办法关闭 Hangfire 使用 Serilog 进行的日志记录?

    有没有办法关闭 Hangfire 使用 Serilog 进行的日志记录 我们正在使用我们自己的抽象 我不希望在使用 Serilog 时来自 Hangfire 记录器的所有额外噪音 INIT call under web project na
  • WCF 客户端返回空数组 - XML 响应似乎正常

    我正在尝试为我们的 Intranet 上托管的 Web 服务创建一个简单的 WCF 客户端 C 使用 Fiddler 和 SoapUI 我可以看到请求和响应似乎正常 但是当我运行代码时返回一个空数组 我会尝试只粘贴相关的行 但会是很多东西
  • 如何设置cookie值?

    我正在执行以下操作来设置 cookie 值 HttpCookie mycookie new HttpCookie mycookie mycookie Value value1 Case sensitivity mycookie Expire
  • 将数字 n 拆分为 k 个不同数字的总和

    我有一个数字 n 我必须将它分成 k 个数字 使得所有 k 个数字都是不同的 k 个数字的总和等于 n 并且 k 最大 例如 如果 n 为 9 则答案应为 1 2 6 如果 n 为 15 则答案应为 1 2 3 4 5 这就是我尝试过的 v
  • 访问结构向量

    我有一个结构 struct OutputStore int myINT string mySTRING 如果我创建一个 OutputStore 类型的数组 如下所示 OutputStore OutputFileData new Output
  • C++20 views::join 在生成的嵌套范围::single_view 上进入无限循环

    我正在使用 GCC 实现 v10 2 和 v11 来处理 C 20 范围 测试的行为std views join https en cppreference com w cpp ranges join view 我尝试使用生成嵌套视图sin
  • 如何在 C# 中停止程序进一步执行

    string FirstName Console ReadLine if FirstName Length gt 12 Console WriteLine if FirstName Length lt 3 Console WriteLine
  • 为什么 C++ 元组如此奇怪?

    我通常创建自定义structs将不同类型的值分组在一起时 这通常很好 而且我个人发现命名成员访问更容易阅读 但我想创建一个更通用的 API 在其他语言中广泛使用元组后 我想返回类型的值std tuple但发现它们在 C 中使用比在其他语言中
  • 我们可以使用 C# 录制发送到扬声器的声音吗

    我有一个软件 SoundTap Streaming Audio Recorder 它记录发送到扬声器的任何音频 无论流是来自网络还是来自某些文件或麦克风 我可以在桌面应用程序中制作这样的应用程序 以便我可以录制发送到扬声器的流 无论来源如何
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • Lambda 按值捕获和“mutable”关键字

    关键词的必要性mutable在 lambda 中 是造成极大混乱的根源 考虑代码 int x 10 function
  • int 类型的构造函数

    考虑到成本 这些情况是否相同 case 1 int a 5 case 2 int a 5 case 3 int a a 5 这三种语法是不同的 请耐心等待 我使用用户定义类型而不是 int 稍后我将回到 int T a 5 Direct i
  • InvalidOperationException:没有为方案“CookieSettings”注册身份验证处理程序

    我正在使用 ASP Net MVC core 2 1 开发一个应用程序 其中不断出现以下异常 InvalidOperationException 没有为方案 CookieSettings 注册身份验证处理程序 注册的方案有 Identity

随机推荐

  • 【ICCV2023】Robustifying Token Attention for Vision Transformers

    Robustifying Token Attention for Vision Transformers 论文 https arxiv org abs 2303 11126 代码 暂未开源 解读 ICCV 2023 Token过度聚焦暴露注
  • Topaz Video Enhance AI中文版

    教程 1 下载解压 双击运行 VideoEnhanceAI windows x64 installer exe 进入安装向导 2 勾选我接受许可协议 3 选择安装目录 也可以选择默认安装 4 安装完成 先不要运行软件 退出向导 5 将文件夹
  • android利用SAX解析xml(以解析谷歌天气预报xml预报为例)

    package com mars android import java io BufferedInputStream import java io InputStream import java net URL import java n
  • ElastAlert2告警不分词查询

    原查询条件 需求是带 服务商回传提单异常 的日志捞出来告警 当我按以下查询条件告警时会发现匹配不到我想要的日志 原因 query string查询默认就是模糊查询 并且是分词查询 例如 123 会拆分查询是否带否带1 带2 带3的日志 条件
  • Java 基本类型和包装类型侧重学习笔记(基础)

    包装类可以是null 而基本类型不可以
  • Ubuntu安装NVIDIA独立显卡驱动出现X service error问题解决方法

    目录 问题症状 解决方法 参考网址 问题症状 最近在Ubuntu下安装NVIDIA独立显卡驱动的过程中出现X service error问题 如下图所示 解决方法 0 到NVIDIA 官网上下载驱动文件 run 格式 Official Ge
  • python HHT实现方法

    引言 随着信号处理领域的不断发展 自适应信号处理和非线性信号分析成为了研究的热点 在这两个领域中 Hilbert Huang变换 HHT 作为一种强大的工具 被广泛应用于信号的时频分析和模态分解 本文将介绍如何使用Python实现HHT 并
  • 解决 微软应用商店无法联网 0x80072EFD问题

    近期使用微软应用商店发现不能正常的连接网络 小娜也是 经过检查是使用了代理自动配置脚本 PAC 的原因 按win键 输入网络代理设置 打开代理设置界面 设置 使用安装程序脚本 为关
  • SpringBean的生命周期

    Spring Bean Lifecycle 1 过程 1 调用无参构造 2 执行 set 方法设置属性 也可以是 Bean 注解方法内容 3 调用 BeanNameAware 的 setBeanName 方法 可以获得 Bean 的名字 4
  • 0N在计算机里面起什么作用,计算器0n/c是什么键

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 计算器0n c是开机键以及清屏键 此键一方面有着开机的功能 另一方面也有着清除屏幕内容的功能 计算器是现代人发明的可以进行数字运算的电子机器 现代的电子计算器能进行数学运算
  • 在微软任职近 20 年,Windows、Surface 负责人官宣将离职!

    整理 屠敏 出品 CSDN ID CSDNnews 9 月 19 日 据外媒 The Verge 报道 负责领导 Windows 开发和 Surface 产品线的微软首席产品官 CPO Panos Panay 即将离职 这一消息来得很突然
  • XML基本规则(XML语法规则)

    XML基本规则 XML语法规则 1 XML 文档必须包含在一个单一元素中 2 XML 元素不能重叠 必须正确的嵌套 3 不能省去任何结束标记 或者说标记必须成对 4 XML 元素是区分大小写的 也就是大小写敏感 5 XML 文档中的属性有两
  • 源码安装zabbix

    源码安装zabbix 1 zabbix简介 2 zabbix的主要功能 3 监控指标 4 zabbix配置文件 5 服务器端配置文件 6 客户端配置文件 7 部署zabbix 8 先安装apache 8 1 安装开发工具包 8 2 下载ap
  • python使用plt.savefig保存时图片保存不完整,四周留白太多

    问题 今天在给论文添加曲线图 使用matplotlib的savefig函数中遇到图片保存不完整 且留白太多的问题 插入到论文中很难看 左边是在pycharm里的截图 右边是通过savefig保存的图片 代码如下 保存图片 plt savef
  • 怎样在PB中实现文件的拷贝与删除 (转)

    怎样在PB中实现文件的拷贝与删除 转 more 怎样在PB中实现 文件的拷贝与删除 可借助外部 函数 可用 api函数实现 1 文件拷贝 函数声明 FUNCTION boolean CopyFileA ref string cfrom re
  • 安装及使用ceres遇到过的问题

    首先ceres安装及使用需要两个依赖库glog与gflags 这两个库安装时需要注意要么只用apt install要么只用源码编译安装 如果两个都装了用apt purge或者在 usr local lib及 usr local includ
  • 设置Unity的帧率

    问题描述 Xsens接收数据的频率是30Hz 为了接收到正确 完整的数据 要将Unity的帧率换成30帧 第一种方法 点击Editor gt Project Setting gt Quality 将VSync Count那选择Every S
  • 测试框架pytest教程(4)运行测试

    运行测试文件 pytest q test example py 会运行该文件内test 开头的测试方法 该 q quiet标志使输出保持简短 测试类 pytest的测试用例可以不写在类中 但如果写在类中 类名需要是Test开头 非Test开
  • C/C++中使用Base64编码解码(使用boost库)

    Base64是一种用64个字符来表示任意二进制数据的方法 用记事本打开exe jpg pdf这些文件时 我们都会看到一大堆乱码 因为二进制文件包含很多无法显示和打印的字符 所以 如果要让记事本这样的文本处理软件能处理二进制数据 就需要一个二
  • c++判断硬盘是否连接、修改指定盘符、读取配置文件、获取exe路径

    系统 win7 64 编译器 vs2010 mfc对话框程序 工程名 fixde 语言 c 涉及函数 GetPrivateProfileString 读取配置文件内容 类型为string GetDriveType 获取某驱动器状态 GetV