渡盡劫波兄弟在浪汪,相逢一笑泯恩仇
一惰拱、簡介
??我在上一篇如何使用LabVIEW自動保存數(shù)據(jù)雌贱?的文章中介紹了怎樣使用labview自動保存下位機(jī)發(fā)送到上位機(jī)的數(shù)據(jù),這些需要保存的數(shù)據(jù)都存儲在特定格式的文件中偿短,當(dāng)我們需要查詢這些試驗(yàn)數(shù)據(jù)時欣孤,直接讀取這些數(shù)據(jù)文件就能看到,還可以將這些數(shù)據(jù)另存為word或PDF文件昔逗。
??但是降传,我們還有一個問題需要解決:當(dāng)電腦硬盤中的數(shù)據(jù)越存越多的時候,遲早會把硬盤撐爆勾怒,導(dǎo)致新數(shù)據(jù)無法存儲婆排、電腦運(yùn)行速度變慢、卡頓等各種問題笔链。所以段只,適當(dāng)刪除時間比較久遠(yuǎn)的數(shù)據(jù),清理內(nèi)存是很有必要的鉴扫。手動刪除舊數(shù)據(jù)是可行的赞枕,但是在現(xiàn)今智能化越來越普及、越來越追求高效率的大趨勢下坪创,上位機(jī)自動刪除數(shù)據(jù)文件就應(yīng)該成為一項(xiàng)標(biāo)配功能炕婶。
??接下來我將介紹使用LabVIEW自動刪除文件的方法,這個方法完全是我閉門造車想出來的莱预,屬于一家之言柠掂,如果大家還有更好的方法,歡迎批評指正依沮。
二涯贞、實(shí)戰(zhàn)練習(xí)
??我的開發(fā)環(huán)境:Windows10(64bit)、LabVIEW2017
1悉抵、 編程思路
??自動刪除文件肩狂,首先要明確一個問題摘完,就是如何識別需要刪除的文件姥饰?一個文件最重要的兩個特征是文件名和后綴,只要識別了文件名孝治,基本上就可以鎖定這個文件列粪,然后才可以進(jìn)行自動刪除审磁。一般的數(shù)據(jù)文件都保存在一個固定路徑的文件夾中,那么我們就需要識別這個文件夾中的所有數(shù)據(jù)文件岂座,識別完以后态蒂,就是篩選文件,把符合刪除條件的文件篩選出來费什,將其刪除钾恢,不符合條件的文件繼續(xù)保留。
??這里就引出了第二個問題鸳址,如何篩選符合條件的文件瘩蚪?我在網(wǎng)上查了下,普通住宅小區(qū)的監(jiān)控視頻系統(tǒng)保存視頻文件的最長期限是一個月稿黍,也就是說你最多只能查到1個月前監(jiān)控錄像疹瘦,再早一點(diǎn)的文件都被自動刪除或者被新文件覆蓋。我個人覺得工控上位機(jī)傳輸?shù)臄?shù)據(jù)量一般都不是很大巡球,也沒有視頻文件那么占內(nèi)存言沐,刪除超過半年或者1年文件比較合適。當(dāng)然酣栈,具體問題具體分析险胰,文件究竟要保存多久,還是應(yīng)以實(shí)際應(yīng)用為準(zhǔn)矿筝,因?yàn)槊總€工控機(jī)硬盤的大小以及數(shù)據(jù)文件的大小都不一樣鸯乃。
??通過對以上兩個問題的分析,自動刪除文件的編程思路就很清晰了:讀取特定路徑文件夾中的所有文件的文件名跋涣,然后根據(jù)文件名判斷文件的創(chuàng)建時間缨睡,如果創(chuàng)建時間超過設(shè)定的時間(比如一年),就把該文件刪除陈辱,不滿足條件的保留下來奖年。
??那要如何根據(jù)文件名來判斷文件的創(chuàng)建時間呢?我在上一篇的LabVIEW自動保存數(shù)據(jù)的文章中沛贪,是以系統(tǒng)時間給數(shù)據(jù)文件命名的陋守,讀取了該文件的文件名,對文件名進(jìn)行處理利赋,就可以知道該文件是什么時候創(chuàng)建的水评。這時候可能有人要問了,為啥不直接讀取文件的創(chuàng)建時間呢媚送,Windows系統(tǒng)會自動記錄每一個文件的創(chuàng)建時間中燥,說實(shí)話我也覺得直接讀Windows系統(tǒng)記錄的創(chuàng)建時間最好,可是我不會啊塘偎。
2疗涉、實(shí)現(xiàn)過程
??LabVIEW中對應(yīng)的刪除文件的模塊在下圖所示的位置:
??在“高級文件函數(shù)”欄中拿霉,有“羅列文件夾”绽淘、“刪除”等需要用到的功能模塊闹伪。
??再來看下實(shí)現(xiàn)自動刪除文件的源程序,如下圖2所示:
??路徑我直接用“應(yīng)用程序目錄”模塊伦意,然后將目錄里的文件羅列出來,羅列模塊會輸出文件名硼补,還有文件夾名驮肉。我們只需要文件名,文件名是一個字符串已骇,由于我之前的文件都是以系統(tǒng)時間命名的离钝,時間格式為%Y-%m-%d %H'%M'%S,也就是說程序讀到的文件名是“2023-08-23 16‘36’20”這種類型的字符串褪储,我們只需要這個文件名中的年月日參數(shù)卵渴,時分秒沒有意義。
??然后以%Y-%m-%d格式讀取當(dāng)前的系統(tǒng)時間鲤竹,分別截取出兩個時間字符串?dāng)?shù)組年浪读、月、日數(shù)據(jù)碘橘,并將字符串轉(zhuǎn)換成數(shù)字,便于后面進(jìn)行加減乘除運(yùn)算吱肌。需要注意的是痘拆,年份占字符串?dāng)?shù)組4個元素,月份和日只占2個元素氮墨,中間的"-"占1個元素纺蛆。
??最后再用當(dāng)前時間的年數(shù)據(jù)減去文件名的年數(shù)據(jù)规揪,為換算成天數(shù)猛铅,差再乘以360天祥款;同理月份數(shù)據(jù)相減,差乘以30換成天數(shù)桨昙;日數(shù)據(jù)相減得到天數(shù)。最后將3個天數(shù)相加,得到數(shù)據(jù)文件建立的時間距離當(dāng)前時間有多少天阁危,這個計(jì)算出來的天數(shù)如果超過設(shè)定的天數(shù),就將對應(yīng)文件刪除趴乡,否則保留。
??程序中“應(yīng)用程序目錄”模塊的位置如下圖所示:
??整個程序的邏輯思路其實(shí)很簡單萤捆,理解了之后就很容易寫出來裙品。如果保存的數(shù)據(jù)文件不以系統(tǒng)時間命名,我這個程序就無法自動刪除文件俗或,還得另尋他法市怎。有更好思路的大佬可以分享出來,大家一起學(xué)習(xí)辛慰。
3区匠、結(jié)果
??本人實(shí)測,是可以將對應(yīng)文件夾中的以系統(tǒng)時間命名的文件刪除的,自動刪除文件的過程很短驰弄,不好錄制視頻麻汰,就不po圖了,感興趣的可以自己去試試戚篙。
三五鲫、小節(jié)
??1、這個刪除文件的程序不用放在while循環(huán)中岔擂,也就是說位喂,在軟件打開的時候運(yùn)行一次就夠了,因?yàn)樵趯?shí)際應(yīng)用中我們不需要一直刪除文件乱灵,其只用放在上位機(jī)主程序的while循環(huán)外面就行塑崖;
??2、在自動保存數(shù)據(jù)文件的時候痛倚,要用系統(tǒng)時間給文件命名规婆,否則本程序?qū)⑹В恢劣谌绾巫詣佑孟到y(tǒng)時間保存數(shù)據(jù)文件蝉稳,可以參考我上一篇文章聋呢;
??3、這個程序刪除文件的效果是徹底刪除颠区,回收站里是沒有對應(yīng)文件的削锰,數(shù)據(jù)無價(jià),在使用本程序的時候毕莱,最好先將重要數(shù)據(jù)文件復(fù)制備用一份器贩,再來做刪除試驗(yàn)。