遍歷某資料夾並刪除一定字尾的檔案 soil 2

2021-07-11 07:46:08 字數 944 閱讀 7869

繼昨日留下的問題:有一些檔案因帶有特殊符號而無法進行刪除操作?

為什麼有這些特殊符號就不行了呢?是因為這些特殊符號的本質就是   '?'   ,而檔案或者資料夾的命名是不能有"           < > / \ | : " * ?"這些符號的,所以不能進行操作。

於是我想到只要把這些檔案的名稱獲取,然後去掉這些特殊符號,通過rename函式來修改檔案的名稱就變得很簡單了。

但是問題卻沒有我想的這麼簡單,當你要使用rename函式的時候,傳遞的oldname引數還是帶有特殊符號的原檔名,不然你找不到原檔案,但是有特殊符號的話就會有「引數有誤」的錯誤提示,從而無法使用rename函式了。

那麼rename 函式無法用的話,我又想到能不能直接修改已獲得檔案的名稱,只要傳遞的是陣列名稱的指標就好了,也就是指標的指標,char**型別的。

這裡又有乙個問題冒出來了(顯示了我的c基礎還是不夠紮實),當形參是我所想象的char **型別時,我對於找到的檔名稱進行取位址,也就是把&finddata.cfilename當實參進行傳遞,這時候報出乙個警告,型別不匹配

-->>char ** ' differs in levels of indirection from 'char (*)[260]

仔細一想,反正只是個警告,先不管他,先執行,看看能不能直接修改檔案的引數。

當然,事實是不行的。

接著我想,說不定是這個警告的問題。

解決這個警告也就是把形參的形式和我傳遞的實參形式對應上,根據報錯來看,這裡的實參是    char (*)[260],但是卻有點讓人看不懂。

現在的我還暫時解釋不了二維陣列作為實參傳遞,形參需要怎樣的形式。

總之,在這裡應該把形參的形式由char **filename改為char (*filename)[260]。

再接著執行,確實是沒錯誤沒警告,但是程式最後還是沒能把不能刪除的檔案的檔名稱進行修改。

剩下的問題需要鞥解決了繼續上傳了。

檔案遍歷及資料夾的刪除

檔案遍歷有兩種方法,一種使用glob函式以陣列的形式取到指定目錄下的檔案 另一種是用opendir與closedir通過開啟關閉資源的方法用readdir 函式取到所有檔案,但是通過這種方法會取到 與 兩個檔案,這兩個會返回上級目錄,遍歷時應跳過這兩項。1.利用glob函式遍歷檔案,並用filesi...

linux 定時刪除某資料夾前一天的所有檔案

1 shell指令碼deletetempdirfiles.sh 查詢目錄下前一天建立的所有檔案,然後執行刪除 export temp dir home freecall tempdir echo delete the tempfiles before 1 days.rm rf temp dir fi...

刪除資料夾及其子資料夾中所有tmp字尾的檔案

option explicit const window handle 0 const options 0 const file type tmp if vartype objfolder vbstring then dim fso set fso createobject scripting.fi...