VC的路径

2023-10-27

1.注意#include "../Common/MyTD.h" 这里面的目录表示方式与

CFile saveFile;

saveFile.Open(_T("\\abc.bmp"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);

这两种路径表达方式是不一样的。

2.    

绝对路径_T(D:\\Project\\imageTest\\ImageRecognition.bmp)

当前目录:_T(ImageRecognition.bmp)

上级目录:_T(..\\ImageRecognition.bmp)

上级目录下的子目录:_T(..\\子目录文件夹\\ImageRecognition.bmp)

但是这种方法并不好,因为这种方法是不稳定的。如果程序一运行就使用这种方法来访问程序根目录,一般不会出错。但一旦在程序运行过程中调用了文件打开对话框,那么默认目录就会改变为打开文件的目录地址,这时候若依然这样来访问,就会出错。所以推荐使用方法3来访问根目录。

同时注意_T(\\ImageRecognition.bmp)这样的访问方式编译可以通过并且程序运行不会报错。但是这样是不会访问到正确的文件的。

3.获取当前exe文件所在目录。这样获取到的是一个绝对路径

 

CString rootFilePath;
TCHAR rfPath[MAX_PATH];
::GetModuleFileName(NULL, rfPath, MAX_PATH);
(_tcsrchr(rfPath, '\\'))[1] = 0; //去掉可执行文件名,(_tcsrchr(rfPath,'\\')指向了“\\”的字符地址
rootFilePath.Format(_T("%s"), rfPath);

解析:

A.    MAX_PATH 是系统自定义的一个宏,其大小为260

#define MAX_PATH         260

B.     

DWORD GetModuleFileName(HMODULE hModule,
						LPTSTR lpFilename,
						DWORD nSize
);
函数参数说明:

hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。

lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数。

nSize DWORD ,装载到缓冲区lpFileName的最大值。

C.    

 (_tcsrchr(rfPath,'\\'))[1]=0;
这行代码可以分解为两部分:

CHAR* lPath = _tcsrchr(rfPath, '\\');
lPath[1] = 0;

首先,_tcsrchr(rfPath,'\\');的作用是在rfPath字符串中寻找最后一个'\\'的位置。找到后返回该位置。于是lPath中存储的就是指向最后一个'\\'的指针,也就是指向左边的那条\。

然后,lPath[1] = 0;由于lPath指向左边的\,所以lPath[1]就是右边的\的位置,这行代码的作用是将右边的\改成0。从而最后一个'\\'就变成了'\0'

而字符串是以'\0'结尾的。所以编译器会认为该字符串到这里就结束了。从而在之后的赋值中到这里就会结束。

例:

在项目根目录imageTest文件夹下有一张名为dest.bmp的位图:

D:\\Project\\imageTest\\dest.bmp

现在想要获取该根目录地址D:\\Project\\imageTest

先调用GetModuleFileName()函数,获取exe文件的地址:

_T(D:\\Project\\imageTest\\ImageRecognition.exe)

然后调用(_tcsrchr(rfPath,'\\'))[1]=0;将最后一个\改为0:

_T(D:\\Project\\imageTest\0ImageRecognition.exe)

由于编译器将\0作为字符串结束标志,故调用

rootFilePath.Format(_T("%s"),rfPath);

来将字符串内容赋值给rootFilePath的时候,赋值的内容是

_T(D:\\Project\\imageTest)

从而得到了根目录。

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

VC的路径 的相关文章

  • 安装VS2008后,在winnt.h中出现编译错误

    我正在尝试将我们的项目从 VS2005 转移到 VS2008 并且在 MFC 项目上遇到此构建错误 C Program Files Microsoft SDKs Windows v6 0A include winnt h 236 error
  • 在 Visual Studio 2013 中显示带有偏移量的控件

    最近 我将源代码从 Visual Studio 2010 迁移到 Visual Studio 2013 在 Visual Studio 2013 中构建后 控件将显示有偏移 单击下面的链接查看图像 链接到图像 https i stack i
  • 如何正确捕获 Aero/DWM 上的特定窗口

    背景资料 我编写了这个 MFC 应用程序并使用了很长时间 当用户按下 Print Screen Alt Print Screen 键时 它几乎会自动将屏幕截图保存到硬盘 我一直推迟使用任何与 Aero 相关的东西 直到现在我已经使用 Win
  • 同时显示同一文档的多个视图

    如何说服 MFC 文档 视图体系结构让我同时显示同一文档的两个不同视图 例如 说我的CDocument子类代表某种描述的档案 我想要一个用户界面 其中该存档中的所有条目的名称都显示在CListView子类显示在左侧窗格中 而当前所选条目的详
  • MFC winMain 如何最终进入可执行文件?

    In MFC wWinMain定义于appmodul cpp 据我所知 该文件内置于 mfc90ud dll 中 但是 当我运行我的应用程序时 调用堆栈显示MyApplication exe wWinMain 它是如何采取的wWinMain
  • C++ Builder vs Delphi vs MFC

    我正在学习MFC 发现它不太好用 我听说过很多关于 Delphi 的事 对 Delphi 的研究让我接触到了 C Builder C Builder 是否提供了 C MFC 的严肃且良好的替代方案 C Builder 比 MFC 更好吗 C
  • 托管和非托管 C++/MFC 可以混合在一个 dll 中吗?

    以前 我们有 MFC VC6 VB6 和 C 应用程序中的软件 需要调用用 C 和 MFC 编写的相同引擎 该引擎需要 C 来提高速度 当时我们决定使用 COM 作为接口 因为所有三个都可以使用它 并且在编组等方面的问题最少 我们的 MFC
  • 在MFC项目中使用多个资源文件

    我在 VS2015 中使用 MFC C 11 并且有一组独立的 GUI 我想在多个项目中使用它们 我知道这可以通过创建一个 rc 文件来实现 该文件可以包含在每个项目的主 rc 文件中 使用多个资源文件 https msdn microso
  • 从不同操作系统检索到的故障转储指向消息循环。如何从那里到达故障位置? (TeamViewer 使我的进程崩溃。)

    我们软件的一位客户抱怨说 该软件在他的 Windows XP 计算机上崩溃了 我让他下载ProcDump https technet microsoft com en us sysinternals dd996900 aspx并按如下方式运
  • 跨平台 Windows / OS X 开发,具有大量现有代码库

    对于使用 MFC 和 WinAPI 用 C 编写的复杂应用程序 有大量现有代码库 需要将其移植到 Mac OS X 理想的解决方案是在不同平台之间拥有尽可能多的通用代码 尤其是诸如业务之类的代码逻辑 GUI 可能会有所不同 具体取决于跨平台
  • MFC 是否提供了将文本放入剪贴板的快速方法?

    我们的代码库中的添加到剪贴板代码非常低级 分配全局内存等等 对于简单的情况 我只想将一些纯文本放在剪贴板上 是否有任何例程可以包装所有这些内容 一个例子是 CRichEditCtrl 具有 Copy 和 Cut 方法 可以自动将当前选择放入
  • 如何通过单击 MainFrame 内的按钮来更改 MFC 视图

    我想通过单击窗口内的按钮来更改呈现的视图像这样 https i stack imgur com 3IA2o png 我的项目设置 我制作了一个没有文档 视图支持的 MFC 项目 SDI 我在设计器中又创建了两个视图并向它们添加了类 新的视图
  • 您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用吗?

    您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用来更改应用程序的外观吗 如果是这样 它是如何完成的 这个想法是使用随 MSVC 2008 发布的 MFC 功能包来更改控件 例如按钮 的形状 颜色等 不 不能这样做
  • MFC CMenu 工具提示未显示

    我尝试使用类似的东西来设置 CMenu 项的工具提示 如所述here https stackoverflow com questions 2400180 mfc how to add tooltip in cmenu items 但它只是显
  • .NET(或 MFC)的高速图形控件?

    我需要编写一个数字示波器类型的应用程序 有很多很棒的静态绘图控件 但我需要一些可以绘制每秒处理 4000 个样本的 16 条轨迹的东西 有人知道 NET 的高速图形控件吗 我什至会选择 MFC 因为它可以封装到 NET 控件中 谢谢您的帮助
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • 用于基于 MFC 的 GUI 应用程序的免费自动化测试工具

    我是 Windows 开发和测试平台的新手 我正在开发一个基于 MFC 的 GUI 应用程序 并正在寻找有助于 UI 自动化测试的工具 我搜索时出现了一大堆工具 但大多数似乎都不支持MFC 我考虑的选项是 A 编码 UI UI 自动化 看起
  • C++ 中的转换错误

    有人可以帮我解决这个错误吗 我是 C 新手 看来错误就发生在一堆宏中 我能做什么来解决它 或者我怎样才能追踪到它的源头 我真的不明白这个错误 这是否意味着编译器尝试转换该方法void ReadCPUparameter to a LRESUL

随机推荐

  • End of startup status:LOW

    End of startup status LOW 解决方案 加一条约束 set property BITSTREAM CONFIG UNUSEDPIN Pullup current design
  • 【Nginx系列】- 初识Nginx

    目录 第一印象 一 提供HTTP服务 二 提供反向代理 三 提供邮件代理 总结 第一印象 Ngxin是由俄罗斯人 戈尔 赛索耶夫使用C语言编写的高性能Web服务器 它可以做什么 1 提供HTTP服务 2 反向代理服务 3 邮件代理服务 PO
  • linux xfs和ext4的区别

    centos7 0开始默认文件系统是xfs centos6是ext4 centos5是ext3 ext3和ext4的最大区别在于 ext3在fsck时需要耗费大量时间 文件越多 时间越长 而ext4在fsck时用的时间会少非常多 ext4是
  • 区域和检索 - 数组不可变——前缀和法的实践

    一 题目 给定一个整数数组 nums 求出数组从索引 i 到 j i j 范围内元素的总和 包含 i j 两点 二 解析 题目很简单 如果直接暴力法 即存储数组 nums的值 每次调用 sumRange 时 通过循环的方法计算数组 nums
  • 01预习-软件缺陷基础 窗体顶端  1单选(1分)  编码阶段产生的错误由()检查出来的。  A集成测试 B有效性测试 C单元测试 D系统测试  2单选(1分)  修复软件缺陷费用最

    01预习 软件缺陷基础 窗体顶端 1单选 1分 编码阶段产生的错误由 检查出来的 A集成测试 B有效性测试 C单元测试 D系统测试 2单选 1分 修复软件缺陷费用最高的是 阶段 A发布 B编写代码 C设计 D编制说明书 3单选 1分 经验表
  • k8s解析--Pod、Deployment、Service

    一 概念介绍 原文地址 1 Pod Kubernetes 使用 Pod 来管理容器 每个 Pod 可以包含一个或多个紧密关联的容器 Pod 是一组紧密关联的容器集合 它们共享 PID IPC Network 和 UTS namespace
  • 助理电子工程师第二个月的实习总结,问题很多的一个月

    年后因为疫情博主等到3月6号才去上班实习 到现在算第二个月吧 这一个月感觉做了很多事情 不像是第一个月一样只是打打杂 画画大佬项目的PCB 了解公司的产品 这个月实际去做项目 出了不少的问题 心情很复杂 甚至想过被炒鱿鱼什么的 还好调节过来
  • SpringBoot自动配置原理

    文章目录 一 SpringBoot自动配置简介 二 SpringBoot自动配置实现原理 一 SpringBoot自动配置简介 SpringBoot相对于Spring新增了自动配置 也就是对一些常用组件进行一些默认的配置 省略了WebMvc
  • 程序框架-输入控制模块

    输入控制模块 用到之前的事件中心模块和公共Mono模块 核心利用观察者设计模式进行事件的分发与注册 InputMgr脚本 输入控制功能模块通过MonoMgr脚本创建Update方法 在通过EventCenter触发事件
  • 泛微E-Mobile 6.0存在命令执行漏洞

    一 漏洞简介 泛微E Mobile 6 0爆出存在命令执行漏洞的问题 现在已经确认了这个漏洞可以被攻击者利用 在某些情况下 用户的输入可能被直接传递给底层操作系统的命令执行函数 攻击者可以通过在输入中插入特殊字符或命令序列来欺骗应用程序将其
  • 关于后台列表,跳转详情和编辑页面

    后台管理系统 从列表跳转详情页面的常规操作 一般新增 编辑和详情页面是共用的 但是可能详情是禁止编辑的 点击编辑按钮之后页面又要可以编辑 一般情况下 页面初始化 是否能够编辑 是通过路径上的pageType来判断 如 xxxxx xxxxx
  • RealityCapture照片扫描建模流程

    RealityCapture照片扫描建模大概有这么几步 拍摄照片 调整照片 导入照片进软件 然后根据照片生成点云 然后对点云范围进行调整 然后根据最终点云效果生成模型 然后对模型修整并进行简化 毕竟他生成的模型面数过大 也回有一些破面之类的
  • STM32F103+NRF24L01通道配置之多发一收

    STM32F103 NRF24L01通道配置之多发一收 准备材料 让我们开始吧 准备材料 1 NRF24L01模块 3 2 STM32F103C8T6单片机的最小系统模块 3 3 正点原子的例程 实验33 无线通信实验 让我们开始吧 下面只
  • 从封装变化的角度看设计模式——组件协作

    什么是设计模式 要了解设计模式 首先得清楚什么是模式 什么是模式 模式即解决一类问题的方法论 简单得来说 就是将解决某类问题的方法归纳总结到理论高度 就形成了模式 设计模式就是将代码设计经验归纳总结到理论高度而形成的 其目的就在于 1 可重
  • 网页打开时都发生了什么?我被吓着了

    内容参考自网页打开时都发生了什么 我被吓着了 在浏览器里输入网址或者点击链接 网页打开了 这是我们上网时再普通不过的一幕 但是如此简单的表象背后 却隐藏着无比复杂的技术流程 想涨涨知识吗 往下看吧 一个HTTP请求的过程 为了简化我们先从一
  • 图片博客

    在这里插入图片描述
  • Shell输入输出重定向

    一 文件描述符 英文是file descriptor简称fd 文件描述符是一个非负整数 它是一个索引值 指向进程打开的文件 Linux程序在执行任何形式的 I O 操作时 都是在读取或者写入一个文件描述符 每个文件描述符会与一个打开的文件相
  • 前方交会与后方交会

    1 前方交会 1 1 前方交会的概念 利用立体像对两张像片的内方位元素 同名像点坐标和像对的相对方位元素 或外方位元素 解算模型点坐标 或地面点坐标 的工作 称为空间前方交会 在摄影测量中主要有两种 1 利用立体像对两张像片的相对方位元素
  • 命令行mvn打包的时候报错:No compiler is provided in this environment. Perhaps you are running on a JRE

    一 前言 这部分是安装Elasticsearch ik中文分词的时候 用mvn打包报错 No compiler is provided in this environment Perhaps you are running on a JRE
  • VC的路径

    1 注意 include Common MyTD h 这里面的目录表示方式与 CFile saveFile saveFile Open T abc bmp CFile modeCreate CFile modeNoTruncate CFil