我見過幾種檢查C文件存在的方法。但是,我看到的所有內容都適用於特定的文件名。我想檢查任何符合特定模式的文件。例如,可能模式是「lockfile *」和「lockfileA」,「lockfile.txt」或「lockfile.abc」將在檢查中註冊。我現在這樣做的方法是用opendir()打開目錄,然後遍歷readdir()並嘗試將模式與返回的每個文件的名稱進行匹配。它的工作原理,但我確實想要一個更緊湊的方式來做到這一點。有任何想法嗎?在C中,檢查名稱是否匹配模式的文件的存在
回答
您可以使用glob(3)(由POSIX標準化)。你給它一個通配符模式,它會搜索文件系統的匹配。
例子:
#include <glob.h>
#include <stdio.h>
int main(int argc, char **argv)
{
glob_t globbuf;
if (0==glob(argv[1], 0, NULL, &globbuf)){
char **a=globbuf.gl_pathv;
puts("MATCHES");
for(;*a;a++)
puts(*a);
}
globfree(&globbuf);
}
運行:
./a.out 'lockfile*'
應該給你的lockfiles。
謝謝!很高興知道:)但是這不是效率明智嗎?它不檢查所有地方嗎? –
'lockfile *'會啓動遞歸根樹搜索。幾個小時後你就可以準備好比賽了。開玩笑。當然,它不會「檢查所有地方」。試試看。 – PSkocik
哈哈是的,但它是如何工作的?它如何映射fs,所以它不必檢查所有dirs? –
據我所知,這是應該如何做。
對於文件的每個名字d_name
,你可以檢查它的長度,如果它有至少8個字符,strcmp
這8首字符鎖文件。
您也可以使用<regex.h>
進行檢查。
至於迭代,我認爲這是他最好的選擇。
謝謝。試着接受你的回答,但是Stack告訴我我必須等五分鐘。提醒我,如果我忘記了! –
你應該檢查@ PSkocik的[答案](http://stackoverflow.com/a/42680722/451601)。你在你的問題中提供了一個glob模式,並且他指向你** glob **(3)。 –
- 1. 檢查文件名是否在bash的模式匹配
- 2. 如何檢查文件名是否匹配通配符模式?
- 3. 檢查URL是否匹配模式
- 4. 檢查用戶名是否存在,並檢查密碼是否匹配
- 5. 檢查文件名是否存在
- 6. 檢查是否存在Skype名稱
- 7. 檢查名稱是否存在php
- 8. 如何檢查文件是否存在文件擴展名? C#
- 9. C檢查文件是否存在
- 10. c#檢查服務器上是否存在具有特定名稱的文件
- 11. 檢查是否存在來自C#的WMI名稱空間
- 12. 在目錄c#中查找匹配模式的文件?
- 13. 我想檢查用戶插入的文件名是否與目錄中文件的名稱匹配
- 14. unix中的文件名匹配模式
- 15. 檢查文件是否更改名稱
- 16. Shell:檢查參數是否存在並匹配表達式
- 17. 檢查是否存在隱式匹配情況
- 18. 檢查值是否是通過模式匹配的Vector類型
- 19. 檢查文件名是否已經存在於文件夾中?
- 20. Postgresql:檢查模式是否存在?
- 21. 檢查沒有擴展名的文件名是否存在
- 22. 的Javascript檢查文件是否存在
- 23. 如何檢查文件夾中是否存在文件C
- 24. Python中是否存在像這樣的模式匹配函數?
- 25. 檢查JList中是否存在文件
- 26. 檢查Yii中是否存在文件
- 27. 檢查文件中是否存在行
- 28. 控制器名稱是否必須與codeigniter中的文件名稱匹配?
- 29. 檢查url是否匹配模板
- 30. 在Pentaho水壺中,如何檢查文件名是否存在?
就是這樣做,鮑勃 –
@ammoQ感謝您的詞! –
通配符由shell文件搜索實用程序使用。可以做的一種方式是將這樣的命令傳遞到帶重定向輸出的shell,然後分析它創建的文件。但這是一個可怕的方式去做。 –