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

相关文章

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

如何清理MySQL中的binlog问题

《如何清理MySQL中的binlog问题》:本文主要介绍清理MySQL中的binlog问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目http://www.chinasem.cn录清理mysql中的binlog1.查看binlog过期时间2. 修改binlog过期

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

Python实现剪贴板历史管理器

《Python实现剪贴板历史管理器》在日常工作和编程中,剪贴板是我们使用最频繁的功能之一,本文将介绍如何使用Python和PyQt5开发一个功能强大的剪贴板历史管理器,感兴趣的可以了解下... 目录一、概述:为什么需要剪贴板历史管理二、功能特性全解析2.1 核心功能2.2 增强功能三、效果展示3.1 主界面

Java版本不兼容问题详细解决方案步骤

《Java版本不兼容问题详细解决方案步骤》:本文主要介绍Java版本不兼容问题解决的相关资料,详细分析了问题原因,并提供了解决方案,包括统一JDK版本、修改项目配置和清理旧版本残留等步骤,需要的朋... 目录错误原因分析解决方案步骤第一步:统一 JDK 版本第二步:修改项目配置第三步:清理旧版本残留兼容性对

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境