Creo 二次开发-清理历史版本

2023-12-21 17:08

本文主要是介绍Creo 二次开发-清理历史版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用自带的 purge.bat 可靠性更高,自己写的程序从逻辑上应该是没有问题的,没有仔细研究过自带的 purge.bat,不知道里面是否带有文件校验。
理论上来说,清理历史版本只是根据文件最后一个后缀的大小来确定保留那个文件,这一逻辑是否存在 bug 还需要继续测试。

方法一:利用 powershell 优化 Creo 自带 purge.bat

该方法在代码上很简单,先利用 purge 清理历史版本,然后再重命名小版本为 1。
印象中 Creo2.0 自带的 purge.bat 是可以直接复制到相应目录双击运行来清理小版本的,不知道 6.0 的为什么不行了。然后就用 powershell 给它套了个壳,顺便把所有小版本都改为 1。

Get-ChildItem *.* | ForEach-Object {$file = $_$file.IsReadOnly = $false
}
&'C:\Program Files\PTC\Creo 6.0.4.0\Parametric\bin\purge'
Get-ChildItem *.[0-9]* | Rename-Item -NewName {$_.fullname -replace '\.[0-9]*$' ,'.1'}

方法二:使用 c++编写可执行程序

  1. 遍历目录,将所有文件初始化为_FileExt 实例,存入 vector 中,按文件名顺序排序。
    实际测试过程中发现,_findnext()就是按照文件名顺序,不进行手动排序也没有问题。这里为了保险,增加一步排序。
void ListFileByType(const char *path, const char *match, vector<_FileExt> &files)
{//文件句柄intptr_t hFile = 0;//文件信息struct _finddata64i32_t fileinfo; //包含中文目录,使用宽字符string p;if ((hFile = _findfirst(p.assign(path).append("\\").append(match).c_str(), &fileinfo)) != -1) //查找目录下文件,并将信息存入fileinfo{do{//排除目录if (strcmp(fileinfo.name, ".") == 0 || strcmp(fileinfo.name, "..") == 0)continue;p.assign(path).append("\\").append(fileinfo.name);_FileExt file(p.c_str());files.push_back(file); //_FileExt自建类,包含绝对路径和扩展名} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);}sort(files.begin(), files.end(), sortbyname);
}
  1. 将后缀转化为数字,如后缀不是数字,返回值为 0
int str2int(const string istr)
{istringstream ss;ss.str(istr);int ret = 0;ss >> ret;return ret;
}
  1. 遍历文件列表,比较文件名相同的两个文件的后缀,即小版本号,删除版本号较小的一个。
  2. 对清理后的文件重新名,将小版本号改为 1。
  3. 可执行程序后面可接受一个目录作为参数,实现清理指定目录。可将该可执行程序目录放入系统环境变量中方便使用

问题及解决方案

  1. 源码字符集和执行字符集
    如果是纯英文,也就是纯 ASCII 字符,完全不用考虑编码问题,一旦涉及中文就变得非常麻烦。
    按照下面文章的说法,源码文件中涉及中文时,把编码改为 utf-8 with BOM,并添加"#pragma execution_character_set(“utf-8”)",实际测试中发现,不添加#pragma 也没有异常,可能是默认的 locale 字符集就是 utf-8。测试中还发现,将源码文件改为 Unicode 也是没有问题的。
    参考:C++ 编译器对字符编码的要求和处理方式
  2. 字符串的处理
    为了简化和统一字符串的处理,当前程序第一次尝试了尽量采用 char 数组,非必要情况下不使用宽字符。

源代码

0.2purge

这篇关于Creo 二次开发-清理历史版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520821

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

电脑多久清理一次灰尘合? 合理清理电脑上灰尘的科普文

《电脑多久清理一次灰尘合?合理清理电脑上灰尘的科普文》聊起电脑清理灰尘这个话题,我可有不少话要说,你知道吗,电脑就像个勤劳的工人,每天不停地为我们服务,但时间一长,它也会“出汗”——也就是积累灰尘,... 灰尘的堆积几乎是所有电脑用户面临的问题。无论你的房间有多干净,或者你的电脑是否安装了灰尘过滤器,灰尘都

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和