VS C++ Project(项目)的工作目录设置

news2024/11/19 8:31:44

        如果只是简单创建一个VS C++Project或者MFC Project,可能很多时候,只关心将Project放在硬盘的那个位置,与Project目录相关的的其他问题,并不引人注意,我们也不是十分在意。有时我们不得不进行工作目录方面的设置,如Project中需要用到OpenCV图像处理库;生成的可执行文件需要在本地磁盘中创建文件,或者需要打开本地·磁盘中的文件等。下面来探讨VS C++ Project工作目录方面的话题。

        VS C++ Project的工作目录是Project属性的一部分,查看、修改、设置等都在目录项中进行。下面以用VS 2022 创建的DequeTest Project (对话框程序)为例,演示目录属性的查看与设置。

        点击“项目”菜单,然后点击“DequeTest和属性"子菜单:

        弹出DequeTest属性页,如下:

在上面的属性页的配置属性项下的常规项中可以看到:输出目录、中间目录两项与目录相关的内容。点击输出目录项后面的向下符号,即可想象展开,看到”编辑“与”浏览“两个选项:

点击”编辑“项,即可看到输出目录,如下:

输出目录中$(SolutionDir)$(Platform)\$(Configuration)\表示编译生成的文件(输出文件)放在Project所在目录下的平台名目录下的配置目录下,本程序是在win10下用VS2022创建,因此平台名是X64,目前Project配置如下:

配置目录名是:Debug

生成的文件路径如下:

修改输出目录如下:

重新生成解决方案:

可以看到在D目录下生成了输出文件:

点击”浏览“选项,则是浏览选择输出目录,缺省是Project所在目录,如下:

同样中间目录也可修改,也有”编辑“与浏览两个选项,如下:

在配置属性的高级选项中有一项有提到输出目录,如下:

”将C++运行时复制到输出目录“,是什么意思?先不管它,其缺省值是否,将其改为是,如下:

重新生成,看下结果如何。可以看到D目录下多了很多dll文件,如下:

        实际上是将VC++ runtime的1相关文件复制到了输出目录中。一般情况下,不需要将此项选为:”是“,如果的确需要VC运行库,可以在程序文件打包时打包VC运行库,在程序安装时,让其安装VC运行库。

点击配置属性相下的”调试“项,可以看到工作目录一栏,如下:

将其展开,同样也有”编辑“与”浏览“两个选项,可用这两个选项对其进行修改。

点击编辑,在弹出的工作目录对话框中可以看到当前工作目录:

也可在这个对话框中对工作目录进行修改。这里不对其修改。

        展开”VC++目录“项,可以看到很多与目录有关得到项目:

这些目录项,都是可以编辑或者配置的。其编辑或配置需依实际需求进行。一般情况下不要随意修改,否则可能否导致出错。例如本示例项目需要用到OpenCV,就需要配置”包含目录“与库目录。包含目录配置是指出包含内容所在目录,DequeTest Project的配置如下:

DequeTest Project的库目录配置是指出OpenCv库所在目录,其配置如下:

上面探讨了与Project工作目录及相关目录的配置。如果程序要打开工作目录中的文件,需要如何配置路径呢?例如,如果要为本示例的对话框中的打开,按钮添加代码要打开工作目录中的图像文件要如何设置文件路径呢?

现在来为”打开“按钮来添加事件处理程序,在添加代码前先将一个图像文件Copy到Project目录下,因为该目录即为Project的工作目录。如下:

添加”打开”按钮事件处理程序的代码如下:

void CDequeTestDlg::OnBnClickedOpen()
{
	Mat src = imread("1.tif");
	if (src.empty())
		MessageBox(L"无法打开图像!");
	else
	{
		MatToCImage(src, mImage);
		DispalyImage(mImage);
	}
}

由于图像文件已经放在其工作目录中,所以不需要要特别指出文件所在目录。上面代码中用到了两个函数:MatToCImage与DisplayImage,这里两个函数事先已写好,因与本文主题无关,这里不特别做说明。试运行,结果如下:

点击“打开”按钮,结果如下:

已正常打开图像。因.\\也是表示当前目录(相对路径表示法),上面的代码修改如下, 也应该可以正常打开图像。

void CDequeTestDlg::OnBnClickedOpen()
{
	//Mat src = imread("1.tif");
	Mat src = imread(".\\1.tif");
	if (src.empty())
		MessageBox(L"无法打开图像!");
	else
	{
		MatToCImage(src, mImage);
		DispalyImage(mImage);
	}
}

试运行,再点击打开,结果如下:

确实能够正常打开。

        如果程序编译成了可执行的exe文件,exe程序文件的工作目录又是哪个目录?当然是可执行的exe文件所在目录。将可执行的exe文件与图像文件放在同一目,如下:

以管理员身份运行程序,点击打开,结果如下:

可以正常打开。如果将“打开”的源代码改为如下:

void CDequeTestDlg::OnBnClickedOpen()
{
	//Mat src = imread("1.tif");
	//Mat src = imread(".\\1.tif");
	Mat src = imread("..\\1.tif");
	if (src.empty())
		MessageBox(L"无法打开图像!");
	else
	{
		MatToCImage(src, mImage);
		DispalyImage(mImage);
	}
}

则图像文件则需要放在生成的可执行exe文件的上级文件夹中,否则无法打开。将上面Release文件夹中的可执行文件用新生成的文件替代。试运行,点击打开,结果如下:

将图片移动到上级文件夹中。如下:

试运行,点击打开,结果如下:

有关VS C++的工作目录设置就探讨到这里,需要说明的是:如果没有修改Project的工作目录,Project的工作目录就是Project的的所在目录,生成的可执行的exe文件的工作目录是其所在目录,即将生成的可执行的exe文件Copy到哪个目录下,这个目录就变成了生成的可执行的exe程序文件的工作目录,如果该程序文件选打开文件,文件的相对位置必须正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Javascript前端面试(七)

JavaScript 部分 1. JavaScript 有哪些数据类型,它们的区别? JavaScript 共有八种数据类型,分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是 ES6 中新增的数据类型: ●Sym…

卷积神经网络(一)---原理和结构

在介绍卷积神经网络之前,先提出三个观点,正是这三个观点使得卷积神经网络能够真正起作用。 1. 局部性 对于一张图片而言,需要检测图片中的特征来决定图片的类别,通常情况下这些特征都不是由整张图片决定的,而是由一些…

暑期集训周报三

题解 SMU Summer 2024 Contest Round 8-CSDN博客 CSDN 积累题目 dp 1.花店橱窗 思路:用dp[i][j]表示第i个放在j位置上的最大价值,那么我们可以枚举i-1被放在了区间[i-1,j-1]的那个位置,找到最大价值部分,然后更新dp[i][j]&a…

gitee的远程连接与公钥SSH的连接

目录 1. 登录注册gitee1.1 登录注册1.2 创建仓库 2. 远程连接3. 公钥连接4. 参考链接 1. 登录注册gitee 1.1 登录注册 gitee官网 进入后进行登录注册 1.2 创建仓库 2. 远程连接 在你想要上传文件的文件夹中进行git初始化(我在其他文章已经写过,链接…

FastAPI(七十六)实战开发《在线课程学习系统》接口开发-- 课程详情

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 这个接口用户可以不登录,因为我们的课程随意浏览 那么我们梳理下这里的逻辑 1.根据课程id判断课程是否存在 2.课程需要返回课程的详情 3…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github:X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内,运行下面内容 依赖文件系统环境运行环…

【把玩数据结构】详解队列

目录 队列介绍队列概念队列的结构生活中的队列 队列的实现队列的初始化队列的销毁队尾入队列队头出队列获得队头元素获得队尾元素统计队列元素个数 队列介绍 队列概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列遵…

Python 代码中的 yield 到底是什么鬼?

在Python编程中,有一个强大而神秘的关键字,那就是yield。初学者常常被它搞得晕头转向,而高级开发者则借助它实现高效的代码。到底yield是什么?它又是如何在Python代码中发挥作用的呢?让我们一起来揭开它的面纱。 Pyth…

Chrome浏览器设置暗黑模式 - 护眼模式 - 亮度调节 - DarkReader - 地址栏和书签栏设置为黑色背景

效果图 全黑 浅灰 (DarkReader设置开启亮色亮度-25) 全白 前言 主要分两部分需要操作, 1)地址栏和书签栏 》 需要修改浏览器的外观模式 2)页面主体 》 需要安装darkreader插件进行设置 步骤 1)地址栏和…

Unity UGUI 实战学习笔记(3)

仅作学习,不做任何商业用途 不是源码,不是源码! 是我通过"照虎画猫"写的,可能有些小修改 不提供素材,所以应该不算是盗版资源,侵权删 拼UI 提示面板的逻辑 using System.Collections; using System.Col…

加密溢出问题

今天编写程序,使用一个非常简单的对256取模的运算,但是总是得不到正确的结果。 后来发现,是数据的值的范围问题。 例如,处理图像时,值的范围是【0,255】. 异或等等运算都是没有问题的。 但是,如果进行加法…

websocket通信问题排查思路

websocket通信问题排查思路 一、websocket连接成功,但数据完全推不过来。 通过抓包发现,是回包时间太长超过了1分钟导致的。这种通常是推送数据的线程有问题导致的。 正常抓包的情况如下: 二、大量数据可以正常推送成功,不定时…

C++从入门到起飞之——内存管理(万字详解) 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1. C/C内存分布 2. C语言中动态内存管理方式:malloc/calloc/realloc/free 3. C内存管理…

AI大模型大厂面试真题:「2024大厂大模型技术岗内部面试题+答案」

AI大模型岗的大厂门槛又降低了!实在太缺人了,大模型岗位真的强烈建议各位多投提前批,▶️众所周知,2025届秋招提前批已经打响,🙋在这里真心建议大家6月7月一定要多投提前批! 💻我们…

数字音频工作站(DAW)软件FL Studio 24.1.1.4234中文版

在数字化音乐制作的浪潮中,FL Studio 24.1.1.4234的发布无疑又掀起了一股新的热潮。这款由Image-Line公司开发的数字音频工作站(DAW)软件,以其强大的功能和易用的界面,赢得了全球无数音乐制作人的青睐。本文将深入探讨…

git cherry-pick用法

git cherry-pick 如何将我另一个分支上的某个提交合并到新的分支上 首先切换到新分支上git cherry-pick <commit_hash>例如&#xff1a;git cherry-pick f8a70c9

Linux--Socket编程TCP

前文&#xff1a;Socket套接字编程 TCP的特点 面向连接&#xff1a;TCP 在发送数据之前&#xff0c;必须先建立连接。可靠性&#xff1a;TCP 提供了数据传输的可靠性。面向字节流&#xff1a;TCP 是一个面向字节流的协议&#xff0c;这意味着 TCP 将应用程序交下来的数据看成是…

简单的数据结构:栈

1.栈的基本概念 1.1栈的定义 栈是一种线性表&#xff0c;只能在一端进行数据的插入或删除&#xff0c;可以用数组或链表来实现&#xff0c;这里以数组为例进行说明 栈顶 &#xff1a;数据出入的那一端&#xff0c;通常用Top表示 栈底 :相对于栈顶的另一端&#xff0c;也是固…

【无标题】shell脚本的基本命令+编写shell脚本

shell脚本 一.shell基础 1.shell概念 2.shell脚本 3.shell脚本编写注意事项 二.编写shell脚本 1.编写一个helloworld脚本&#xff0c;运行脚本 [rootshell ~]# vim helloworld.sh #!/bin/bash //声明 echo "hello world!" ls -lh /etc/ 运行脚本(四种方式)&…