渡尽劫波兄弟在,相逢一笑泯恩仇
一、简介
我在上一篇如何使用LabVIEW自动保存数据?的文章中介绍了怎样使用labview自动保存下位机发送到上位机的数据,这些需要保存的数据都存储在特定格式的文件中,当我们需要查询这些试验数据时,直接读取这些数据文件就能看到,还可以将这些数据另存为word或PDF文件。
但是,我们还有一个问题需要解决:当电脑硬盘中的数据越存越多的时候,迟早会把硬盘撑爆,导致新数据无法存储、电脑运行速度变慢、卡顿等各种问题。所以,适当删除时间比较久远的数据,清理内存是很有必要的。手动删除旧数据是可行的,但是在现今智能化越来越普及、越来越追求高效率的大趋势下,上位机自动删除数据文件就应该成为一项标配功能。
接下来我将介绍使用LabVIEW自动删除文件的方法,这个方法完全是我闭门造车想出来的,属于一家之言,如果大家还有更好的方法,欢迎批评指正。
二、实战练习
我的开发环境:Windows10(64bit)、LabVIEW2017
1、 编程思路
自动删除文件,首先要明确一个问题,就是如何识别需要删除的文件?一个文件最重要的两个特征是文件名和后缀,只要识别了文件名,基本上就可以锁定这个文件,然后才可以进行自动删除。一般的数据文件都保存在一个固定路径的文件夹中,那么我们就需要识别这个文件夹中的所有数据文件,识别完以后,就是筛选文件,把符合删除条件的文件筛选出来,将其删除,不符合条件的文件继续保留。
这里就引出了第二个问题,如何筛选符合条件的文件?我在网上查了下,普通住宅小区的监控视频系统保存视频文件的最长期限是一个月,也就是说你最多只能查到1个月前监控录像,再早一点的文件都被自动删除或者被新文件覆盖。我个人觉得工控上位机传输的数据量一般都不是很大,也没有视频文件那么占内存,删除超过半年或者1年文件比较合适。当然,具体问题具体分析,文件究竟要保存多久,还是应以实际应用为准,因为每个工控机硬盘的大小以及数据文件的大小都不一样。
通过对以上两个问题的分析,自动删除文件的编程思路就很清晰了:读取特定路径文件夹中的所有文件的文件名,然后根据文件名判断文件的创建时间,如果创建时间超过设定的时间(比如一年),就把该文件删除,不满足条件的保留下来。
那要如何根据文件名来判断文件的创建时间呢?我在上一篇的LabVIEW自动保存数据的文章中,是以系统时间给数据文件命名的,读取了该文件的文件名,对文件名进行处理,就可以知道该文件是什么时候创建的。这时候可能有人要问了,为啥不直接读取文件的创建时间呢,Windows系统会自动记录每一个文件的创建时间,说实话我也觉得直接读Windows系统记录的创建时间最好,可是我不会啊。
2、实现过程
LabVIEW中对应的删除文件的模块在下图所示的位置:
在“高级文件函数”栏中,有“罗列文件夹”、“删除”等需要用到的功能模块。
再来看下实现自动删除文件的源程序,如下图2所示:
路径我直接用“应用程序目录”模块,然后将目录里的文件罗列出来,罗列模块会输出文件名,还有文件夹名。我们只需要文件名,文件名是一个字符串,由于我之前的文件都是以系统时间命名的,时间格式为%Y-%m-%d %H'%M'%S,也就是说程序读到的文件名是“2023-08-23 16‘36’20”这种类型的字符串,我们只需要这个文件名中的年月日参数,时分秒没有意义。
然后以%Y-%m-%d格式读取当前的系统时间,分别截取出两个时间字符串数组年、月、日数据,并将字符串转换成数字,便于后面进行加减乘除运算。需要注意的是,年份占字符串数组4个元素,月份和日只占2个元素,中间的"-"占1个元素。
最后再用当前时间的年数据减去文件名的年数据,为换算成天数,差再乘以360天;同理月份数据相减,差乘以30换成天数;日数据相减得到天数。最后将3个天数相加,得到数据文件建立的时间距离当前时间有多少天,这个计算出来的天数如果超过设定的天数,就将对应文件删除,否则保留。
程序中“应用程序目录”模块的位置如下图所示:
整个程序的逻辑思路其实很简单,理解了之后就很容易写出来。如果保存的数据文件不以系统时间命名,我这个程序就无法自动删除文件,还得另寻他法。有更好思路的大佬可以分享出来,大家一起学习。
3、结果
本人实测,是可以将对应文件夹中的以系统时间命名的文件删除的,自动删除文件的过程很短,不好录制视频,就不po图了,感兴趣的可以自己去试试。
三、小节
1、这个删除文件的程序不用放在while循环中,也就是说,在软件打开的时候运行一次就够了,因为在实际应用中我们不需要一直删除文件,其只用放在上位机主程序的while循环外面就行;
2、在自动保存数据文件的时候,要用系统时间给文件命名,否则本程序将失效;至于如何自动用系统时间保存数据文件,可以参考我上一篇文章;
3、这个程序删除文件的效果是彻底删除,回收站里是没有对应文件的,数据无价,在使用本程序的时候,最好先将重要数据文件复制备用一份,再来做删除试验。