今天要做的是获取UG安装目录中的后处理文件,后处理文件以“*.pui”为后缀。这里我要做的就是批量获取UG安装目录中符合后缀名的文件名称,然后将这些名称提供给UG对话框进行显示。

​获取UG安装路径

用户可能把UG安装在任何目录,所以没法指定固定的路径来查找文件。UG在安装时会为自己配置环境变量:UGII_BASE_DIR指向了UG的安装目录,所以要想获取到正确的目录我们可以通过获取环境变量中的UGII_BASE_DIR属性来拿到用户UG的安装目录。这里我们可以通过操作注册表来实现环境变量的获取,通过RegOpenKeyEx先打开注册表并获取到句柄,然后通过句柄来操作该注册表的环境变量的注册。注册通过RegSetValueEx方法实现,最后记得RegCloseKey(hKey)关闭注册表生效配置信息。

后处理路径拼接

后处理文件默认存放在../MACH/resource/postprocessor目录下,所以这里需要和UGII_BASE_DIR属性拼接拿到最终的绝对路径。C中字符串拼接有2种,第一种是通过sprintf(str3, "%s%s", str1, str2)函数将str1、str2格式化写入到str3 字符串中。

第二种是通过strcat(str1,str2) 函数将str2以追加的形式与str1拼接在一起,此时必须要保证 str1有足够的内存空间来容纳两个字符串,否则会导致溢出。如上使用strcat就会报错char*没有指定固定的大小去承载str2的内容,我们这样改下就可以使用了。basePath分配了256字符,但是实际只使用了9字符,而postPath只有29字符所以basePath完成可以容纳postPath,这时通过strcat函数就可以正常的拼接路径了。

void SplicePath(char fullPath[_MAX_PATH]) {char basePath[256] = "D:NX8.5";char* postPath = "MACHesourcepostprocessor";strcat(basePath, postPath);//将postPath追加到basePath中CheckDir(basePath, fullPath);}

​检查文件夹是否存在

拿到路径之后我们先对该路径进行判断,看看该路径是否存在。使用chdir()函数将当前的工作目录改变成参数path所指的目录,如果目录存在则返回0, 失败返回-1。这里我顺便对路径做了下判断,如果目录的最后一个字母不是'',则在最后加上''。

查询符合要求的文件

确定了该路径是个存在的目录,我们就可以来筛选符合我们要求的文件了,这里我要的是后处理文件以“*.pui”为后缀结尾,所以这里我们可以定义一个string mode = "*.pui",文件查找可以利用函数_findfirst、_findnext和_fineclose来实现。

1、_findfirst函数:long _findfirst(const char *, struct _finddata_t *);

该函数用于查询与参数相匹配的第一个文件名称(支持通配符),第一个参数为文件名,可以用"*.*"来查找所有文件也可以用"*.pui"来查询.pui文件(该参数附上路径如regfile形式)。第二个参数是_finddata_t结构体指针,这个结构体必须在调用函数前声明,用来存放文件信息的结构体指针。 若查找成功则返回文件句柄,若失败则返回-1。

2、_findnext函数:int _findnext(long, struct _finddata_t *);

该函数用于查询与文件名称匹配的下一个实例,第一个参数为文件句柄,第二个参数同样为_finddata_t结构体指针,找到文件后将该文件信息存入结构体中。若查找成功,返回0,失败返回-1。

3、_findclose()函数:int _findclose(long);

该函数用于结束查找,只有一个文件句柄参数。若关闭成功返回0,失败返回-1。

提取文件名

查询到的文件是个完整的文件名如:m5actt.pui,这里我要的是不带后缀的文件名,所以还需要对文件进行名分割只拿最后一个“.”之前的字符串即可。为了方便存储我定义了一个vectorfiles来存放我们的文件名,Vector是一个封装了可以容纳许多类型的数据动态大小数组的容器,可以实现自动增长的对象数组。find_last_of是用来查找最后一个与字符串中匹配的“.”字符并返回它的位置,而substr() 方法则可在字符串中抽取从指定位置下标开始的指定数目的字符。

//提取文件名string GetFileName(string fileName) {string fileStr = fileName.substr(0,fileName.find_last_of('.'));return fileStr;}

findwindow函数 vb 获取不到句柄_C/C++实战018:获取目录下的指定文件相关推荐

  1. VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法

    问题:有处理学生评语,限于网络条件,往往学生提交的都是单个文件,这就需要将其一一提取出来,然后进行判断.导出等操作,但首先要解决的就是查找所有文件如何操作,这里需要用到Dir函数,当然创建一个文件搜索 ...

  2. linux目录下多个文件行数比对函数 关键字遍历文件 linux命令写入C函数

    人,一定要有勇气和踏实的态度面对改变和选择!开发,零经验起步! 文件行数比对函数: 输入参数:接口文件绝对路径,日期(格式YYYYMMDD:20150716) 根据路径和日期,分别获取这add.del ...

  3. TreeView获取目录下的所有文件

    /// <summary> /// TreeView获取目录下的所有文件 /// </summary> /// <param name="tree"& ...

  4. golang递归获取目录下的所有文件

    简言 1. golang为我们提供了完善的文件操作库,例如os,ioutil等 2. 前人已经写了文件操作的示例,具体可参考这篇博客 https://colobu.com/2016/10/12/go- ...

  5. 获取一个目录下的所有文件

    知道一个目录的路径,使用递归获取该目录下的所有文件: function rDir($filepath) { $result = array();//获取的结果保存在这个数组中 if(is_dir($f ...

  6. java 获取子文件夹_JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件...

    package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要 ...

  7. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  8. java保存图片到tomcat_Java上传图片到服务器路径获取系列之--图片保存到Tomcat的webapps目录下...

    Java上传图片到服务器路径获取系列之--图片保存到Tomcat的webapps目录下 note:有差错或不足之处请批评指正,谢谢! 上一篇介绍了Java web项目中把客户端上传的图片保存到服务器中 ...

  9. android获取文件夹里最新的文件夹,Android 获取已存在的文件所在目录下的所有文件为null。...

    场景如下: 从服务器下载图片文件到手机创建好的目录下,知道图片路径可以获取到图片,但是获取目录的所有文件集合为空. 以下为创建和获取目录的代码,目录不存在则创建:public  String getP ...

最新文章

  1. 讨论:Service层需要接口吗?
  2. 《走进SAP(第2版)》——第2章 企业软件的SAP之路2.1 企业资源计划(ERP)...
  3. 云炬Android开发教程 Android Studio自带的AVD模拟器安装教程
  4. python算法详解张玲玲电子版_算法之路该如何学习?
  5. 馒头何瑫写作训练营的学习笔记总结
  6. Centos7最小化安装
  7. 使用Java访问Mysql数据库时出现时区异常的解决方案
  8. 巴洛克式和哥特式的区别
  9. SQL Server 阻止组件 xp_cmdshell
  10. 区块链:一场始料未及的革命
  11. global.asax、global.asax.compiled、PrecompiledApp.config三者关系
  12. Fiddler抓包原理讲解以及实例操作
  13. 几何分布的期望和方差公式推导_GPR(高斯过程回归)详细推导
  14. PHP服务端 苹果支付(IAP)处理
  15. mount.nfs: mount system call failed问题解决
  16. window7系统的电脑如何调节亮度?
  17. 乾颐堂python完整版百度云_第一卦 乾 乾为天 乾上乾下
  18. 这次把怎么做好一个PPT讲清-其他技巧篇
  19. neuq oj 1034: C基础-求同存异 C++
  20. Mansory之一 :mas_equalTo和equalTo区别与使用

热门文章

  1. 半双工 Wi-Fi 无线局域网讲解
  2. 寻找最给力的恢复软件(数据恢复软件大PK)数据恢复软件测评报告:
  3. java Android OKHttp HTTPS 请求证书验证 PEM证书(1)
  4. libnet编译linux,redhart linux下如何安装libnet
  5. DNF40级冒险团与角色升级经验计算代码
  6. python 化学计量学_【强烈推荐】十三个鲜为人知的大数据学习网站
  7. 2016云栖大会即将开幕,阿里聚安全邀您共同见证盛典
  8. 公司印章管理中必须要知道的23个法律问题
  9. 蓝宝石超频软件测试,RX 480显卡超频测试:超频软件好评,风冷1.35GHz
  10. js ajax上传文件功能