2010-01-28 105 views
6

有沒有什麼方法可以使用*(通配符)刪除(使用remove())多個文件? 我有一組所有以索引開頭的文件。例如:Index1.txt,Index-39.txt等 它們都以索引開頭,但我不知道接下來的內容。同一目錄中還有其他文件,因此刪除所有文件將不起作用。如何使用通配符刪除C中的多個文件?

我知道你可以讀取目錄,迭代每個文件名,讀取前5個字符,比較,如果它適合然後刪除,但是,有沒有更簡單的方法(這是我目前做的方式) ?

這是標準C語言,因爲代碼在Linux和Windows上運行。

回答

9

當您指出您可以使用diropen,dirread,dirclose來訪問目錄內容,您自己的函數(或將通配符轉換爲正則表達式並使用正則表達式庫)來匹配和取消鏈接來刪除。

有沒有一種標準的方法來做到這一點更容易。可能會有圖書館,但它們不會比你所做的更有效率。通常情況下,文件查找功能會在您提供代碼的匹配和操作部分的地方進行回調。你所要保存的只是循環。

+0

感謝您的回答。當人們告訴你什麼事情不能完成時,我總是很感激,而不是說服你。 – Uri 2010-01-28 17:49:46

+2

在Unix上,而不是將通配符轉換爲正則表達式,您應該使用fnmatch(http://www.opengroup.org/onlinepubs/000095399/functions/fnmatch.html)。 – 2010-01-28 17:54:25

6

如果你不介意平臺特有的,你可以使用system()電話:

system("del index*.txt"); // DOS 
system("rm index*.txt"); // unix 

Here是在system()調用一些文件,這是(cstdlib)標準C庫的一部分。

+2

'系統'是按照定義特定的實現,所以我總是添加一個騎手來查找相關的供應商文檔(如果你能找到它的話)。原則最少的驚喜。 – dirkgently 2010-01-28 17:01:38

+1

謝謝,但system()是一個安全噩夢。 – Uri 2010-01-28 17:42:23

0

這是所有的程序嗎?如果是這樣,我們在命令行中執行通配符擴展爲您提供:

int main(int argc, char* argv[]) 
{ 
    while (argc--) 
    remove(argv[argc]); 
} 

在Windows,你需要對「setargv.obj」,包括在VC標準lib目錄鏈接。

相關問題