获取文件的绝对路径

2023-11-06

    想要访问执行程序(.exe)路径下的文件,有以下几个步骤:
    1.先通过函数GetModuleFileName获取执行程序的绝对路径。
    TCHAR szPath[ MAX_PATH ] = {0};
    GetModuleFileName( NULL, szPath, MAX_PATH );
    其中GetModuleFileName函数为windows的API函数,使用的时候需要包含windows.h的头文件;MAX_PATH是一个宏定义,值为260。执行完GetModuleFileName函数之后,szPath数组中保存的就是执行程序当前的绝对路径。
假设执行程序xp.exe的绝对路径为C:\Program Files\Dll\xp.exe,那么szPath数组中存储的值就是C:\Program Files\Dll\xp.exe。
    2.根据执行程序的绝对路径得到需要访问的文件的绝对路径。
    这里需要用到_tcsrchr函数来将获取到的执行程序的绝对路径中的执行程序的名称去掉。即将上面路径C:\Program Files\Dll\xp.exe中的xp.exe去掉,只得到C:\Program Files\Dll\。方法如下:
    (_tcsrchr(szPath,_T('\\')))[1] = 0;
    注:_tcsrchr包含在头文件tchar.h中。
    3.将要访问的文件的名称添加到已经得到的路径中。
    假设需要访问的文件是1.txt,那么如下:
     CString strPath = szPath;
     strPath = strPath + "1.txt";
     在非MFC中,CString包含在atlstr.h头文件中,在MFC中包含在cstring.h的头文件中。
     程序整体如下:
     TCHAR szPath[ MAX_PATH ] = {0};
     if ( GetModuleFileName( NULL, szPath,MAX_PATH ) )
     {
      (_tcsrchr(szPath,_T('\\')))[1] = 0;

     }

     CString strPath = szPath;
     strPath = strPath + _T("1.txt");


    或者

       CString Result, sPath;  
Result = _T("");  
TCHAR sFileName[256];  
GetModuleFileName(AfxGetInstanceHandle(), sFileName, 255);  // 取得当前可执行文件的路径,保存在sFileName中  
sPath = sFileName;  
int index = sPath.ReverseFind('\\');                        // 逆向查找指定字符  
sPath = sPath.Left(index);  
Result = sPath + _T("\\1.txt");



FROM: http://blog.sina.com.cn/s/blog_780976a001015k1q.html

【说明】关于_tcsrchr一行代码

_tcsrchr  

 

 

查找字符串中某个字符最后一次出现的位置

两个参数

第一个参数:字符串

第二个参数:查找的字符

返回值:指向最后一次在字符串中出现的该字符的指针,如果要查找的字符再串中没有出现,则返回NULL。



今天看代码,突然看到了一句让我犯蒙的,一时间还没反应过来。

               代码是这样写的:  *_tcsrchrszPath_T'\\' ) ) = 0;

               仔细推敲了一下,这句代码其实可以分解为两句。 _tcsrchr( szPath, _T( '\\' ) )查找szPath中最后一个\所在的位置,并返回\以后的字符串。

*是取值操作,返回指针所指向地址的值,赋为0也就是将后面的字符串截断.

               还有一种写法,效果是一样的(_tcsrchr(szPath, _T('\\')))[1] = 0;

           

from:http://blog.csdn.net/zuiyuezhou888/article/details/7852472

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

获取文件的绝对路径 的相关文章

  • games101——作业1

    文章目录 作业要求 代码框架 已有代码解读 作业部分代码 进阶部分代码 编译 结果 作业要求 在接下来的三次作业中 我们将要求你去模拟一个基于 CPU 的光栅化渲染器的简化版本 这次作业简要来说就是补全两个函数的内容 一个是 get mod
  • 数据结构实验9:并查集的使用

    问题描述 给定一个图 图中有N个顶点 1 lt N lt 500 编号依次为1 2 3 N 部分顶点之间存在一条无向边 请找出图中所有的极大连通子图 其中 极大联通子图可以描述为该子图中任意两个顶点之间都存在一条路径 且加入任何一个不在该子
  • 会议论文_干货

    研鹿论文 沿路有我 写好论文就找我 有很多同学对会议论文和期刊论文的界定并不是那么明确 那么小鹿今天就为大家详细介绍一下吧 1 会议论文是针对某个学术会议投稿的 且由学术会议的会务组决定是否录用 期刊论文则是针对某学术期刊投稿的 且是由期刊
  • python并发编程:协程asyncio、多线程threading、多进程multiprocessing

    python并发编程 协程 多线程 多进程 CPU密集型计算与IO密集型计算 多线程 多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者 消费者爬虫 Lock解决线程安全问题 使用线程池ThreadPoolExecutor 多
  • 深度学习的局部响应归一化LRN(Local Response Normalization)理解

    1 其中LRN就是局部响应归一化 这个技术主要是深度学习训练时的一种提高准确度的技术方法 其中caffe tensorflow等里面是很常见的方法 其跟激活函数是有区别的 LRN一般是在激活 池化后进行的一中处理方法 AlexNet将LeN

随机推荐

  • github 配置了公钥依旧提示git@github.com‘s password: Permission denied, please try again. 的解决办法

    最近在给新电脑配置GitHub的ssh时 一切都是按照流程进行github上文档的配置流程进行配置 但是把公钥配置到github后 在对仓库进行操作的时候依旧出现一下提示 git github com s password Permissi
  • c++链表实现多项式相加

    文章目录 链表实现多项式相加 数据结构 结构体定义 链表 多项式 初始化 Insert 插入单个节点 多项式的某一项 input 输入 sum 求和函数 print 输出函数 测试代码 测试结果 链表实现多项式相加 例如 已知多项式 L 1
  • 良心分享:基于Java+SpringBoot+Netty+WebSocket+Uniapp轻松搭建准实时聊天问答程序

    一步一步教你搭建准实时聊天问答程序 微信小程序 H5网页 本文将详细介绍如何基于你自己的开源项目搭建一个准实时聊天问答程序 包括微信小程序和H5网页版 该项目服务端主要使用了Java Spring Boot Netty WebSocket等
  • 傻瓜式鸿蒙3.0使用Google(无需电脑)

    首先声明 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 可以先给
  • jsp+mysql分页技巧:巧用limit 进行分页查询

    发现问题 今天检查web程序 浏览 彩信xxxx日志 时 突然发现该web程序中不能浏览了 出错了 如下 500 Servlet Exception java lang OutOfMemoryError Resin 3 0 6 built
  • 文件描述符的阻塞与非阻塞设置

    默认文件描述符是阻塞的 即文件IO是阻塞的 设置为非阻塞 int setNonBlock int fd int flags fcntl fd F GETFL if flags 1 return flags flags O NONBLOCK
  • Qt递归获取指定文件夹下的所有文件

    方法一 使用类QDirIterator来进行遍历 简介 大概是说 适合于大目录遍历 支持递归但是不支持排序 QDirIterator NoIteratorFlags默认值 没有标志 迭代器将返回path符合QDir Filters的条目 Q
  • Android图形显示系统6 图像缓冲区(下)

    一 概述 我们再次回顾下上一篇文章 Android图形显示系统5 图像缓冲区 上 描述的图像缓冲区 Android 图形缓冲区由哪些部分组成 Android 的图形缓冲区由 Surface BufferQueue Layer Graphic
  • 树14--二叉搜索树的第k个结点

    树14 二叉搜索树的第k个结点 jz62 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 给定一棵二叉搜索树 请找出其中的第k小的TreeNode结点 测试用例 输入 5 3 7 2 4 6 8 3 返回值 4 说明 按节点数
  • JSP 页面传值方法总结

    1 URL 链接后追加参数 a href next jsp paramA A paramB B URL 后面追加参数 a
  • 【华为面试题】空间换时间

    题目 代码 function findCenterIndex nums 当数组只有一个元素时 该元素即为中心位置 if nums length 1 return 0 初始化左侧乘积和右侧乘积 let leftProduct 1 let to
  • Unity笔记—7(Unity常用API整理之Transform组件)

    Unity笔记 7 Unity常用API整理之Transform组件 文章目录 Unity笔记 7 Unity常用API整理之Transform组件 前言 一 Transform类 位置转换 核心知识点 属性 方法 继承的方法和属性 来自C
  • 各类配置文件格式简介(ini,yaml,conf,xml...)和nb的Viper

    目录 配置文件 ini 介绍 语法 demo 库 json 语法 demo 库 xml 介绍 语法 demo yaml demo toml properties HOCON plist plist 是捆上了手脚的 xml Viper 22k
  • ES的DSL语句

    1 相关概念 mysql与elasticsearch的概念对比 MySQL Elasticsearch 说明 Table Index 索引 index 就是文档的集合 类似数据库的表 table Row Document 文档 Docume
  • vue 代理服务,解决跨域问题

    1 解决跨域访问失败 在项目的根目录下创建一个 vue config js 文件 创建配置文件 module exports devServer proxy api target http cdn apc 360 cn ws true pa
  • java中^怎么用_^运算符在Java中做什么?

    插入符号 运算符在Java中具有什么功能 当我尝试这个 int a 5 n 它给我 for n 5 returns 0 for n 4 returns 1 for n 6 returns 3 所以我猜它不执行幂运算 但是那是什么呢 您可以张
  • 2023-9-12 完全背包问题

    题目链接 完全背包问题 初版 时间复杂度拉满 include
  • 第四章 随机变量的数据特征 4.3协方差及相关系数

    第四章 随机变量的数据特征 4 3协方差及相关系数 文章目录 第四章 随机变量的数据特征 4 3协方差及相关系数 协方差和相关系数的概念和性质 相关系数的意义 协方差和相关系数的概念和性质 其在一定程度上反应了X 与 Y之间的关系 按照定义
  • 如何更高效的提高CSDN浏览量 - 提升博客的曝光度

    前言 CSDN作为中国最大的IT技术社区 对于技术人员而言 拥有高浏览量的博客是提升个人知名度和影响力的关键 本文将介绍一个名为 CSDN Browsing Plus 的工具 通过它 我们可以更高级地增长CSDN的浏览量 提升博客的曝光度
  • 获取文件的绝对路径

    想要访问执行程序 exe 路径下的文件 有以下几个步骤 1 先通过函数GetModuleFileName获取执行程序的绝对路径 TCHAR szPath MAX PATH 0 GetModuleFileName NULL szPath MA