2014-10-10 249 views
0

所有,查找文件擴展名的目錄

我是新的C++,所以我可能不會尋找合適的功能,術語等等我使用的getopt得到命令行參數。這些參數是本地驅動器上的目錄。執行代碼時,我希望它在該目錄中查找特定的文件擴展名。當它找到擴展名時,我會對該文件執行一些操作,重命名該文件,然後將該文件複製到另一個位置。我堅持試圖找到文件擴展名。據顯示在目錄中的所有文件,我已經得到了:

main.cpp中:

int opt = 0; 

/* If the argument count passes, check for all arguments */ 

while ((opt = getopt(argc, argv, "b:m:o:Hh")) != EOF) { 
    switch(opt) { 
     case 'b': 
      dirCopyEvent(optarg); 
      break; 

dirCopyEvent.cpp:

void dirCopyEvent(char *fileToFind) { 
cout << "You chose the directory " << fileToFind << endl; 

DIR *d; 
struct dirent *dir; 
char *extension; 
extension = strchr(dir->d_name, '.txt'); 

d = opendir(fileToFind); 

if (d != NULL) { 
    while ((dir = readdir(d))) { 
     cout << "Filename is " << dir -> d_name << endl; 
} 

的dirCopyEvent從主調用。我知道我需要爲文件名解析d_name,然後以某種方式找到擴展名,但這是我迷路的地方。任何幫助是極大的讚賞!

  • 編輯* 我想補充一個例子:

我有一個名爲Test目錄。在該目錄中,我有3個文件:test1.txt anothertest.txt yetanothertest.bat

我想只能顯示test1.txt和anothertest.txt的結果,但不能顯示yetanothertest.bat。當我在名字中找到txt擴展名時,我希望能夠將它傳遞給另一個函數來處理它。

謝謝!

回答

0

很可能你需要類似strrchr函數的東西,但它不是C++的方式。這是怎麼一回事呢:

char *ext = strrchr(dir->d_name,'.'); //extension, including the dot 

注意到,該

  • 分機將是NULL如果在文件名中沒有點。

  • 必須包括<string.h><cstring>

問候

0

所有你需要做的就是找到像下面的字符串中的點的最後一次出現。

char *extension; 
extension = strrchr(dir->d_name, '.'); 
+0

我把這個在我的代碼(上面編輯),但我怎麼現在驗證該擴展名實際上在目錄中? – Nutrion 2014-10-10 13:42:13

+0

遍歷目錄中的所有文件,並將strchr應用於所需的任何擴展類型。如果返回類型爲空,則搜索到的字符不在文件名中。此外,strchr將搜索一個字符(而不是字符串)和字符串的開頭。 strrchr將從最後搜索。您需要從結尾處搜索擴展名,因爲文件名中也可以包含「點」。檢查這個http://www.cplusplus.com/reference/cstring/strrchr/ – shobhita 2014-10-16 05:55:12