2011-07-04 61 views
2

是否有替代findfirst()findnext()。 我使用的是microsoft visual c++ 2010 express,它不支持這些函數既不是頭文件<dir.h>替換爲findfirst()和findnext()

我正在計算使用這些函數的目錄中的文件數,但我沒有這些函數的問題。

如果沒有提及的功能替代是否有任何其他出路。 ?其他一些功能?

+1

你檢查:http://msdn.microsoft.com/en-us/library/aa364418(v=vs.85 ).aspx – iammilind

+0

@ iammilind其實這應該是答案 –

回答

3

爲「iammilind」中的註釋(可能是值得回答)說 - 你可以使用Windows API的用FindFirstFileFindNextFile功能,您只需要填寫建立一個結構並遍歷後者,直到遇到無效的句柄。這些功能在控制檯上工作,但是你必須包含'Windows.h'頭文件。

但是,這些函數確實會帶來一些問題,如果您希望代碼在Windows以外的任何地方運行,那麼最好使用另一個頭文件/庫(例如vBx提到的Boost :: Filesystem )。

此外,這可能會有所幫助: C++ - Load all filename + count the number of files in a current directory + filter file extension

1

您可以使用Boost.Filesystem

+0

...我找不到函數來查找文件。 –

+1

閱讀教程http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/tutorial.html你會看到它是多麼容易 – Kobe

1

在Windows中,你可以使用:_findnext,_findnext64,_findnexti64,_wfindnext,_wfindnext64,_wfindnexti64

1

如果你使用MinGW的開發工作室,這可能幫助:

假設你有你想看看在目錄中的文件將是:

sample1.txt 
sample2.txt 
sample3.txt 

這兩個文件匹配模式的代碼「S *」將是:

#include<stdio.h> 
#include<io.h> 

int main() 
{ 
    // the input pattern and output struct  
    char *pattern = "s*"; 
    struct _finddata_t fileinfo; 

    // first file (sample1.txt) 
    int x = _findfirst(pattern, &fileinfo); 
    printf("%s" ,fileinfo.name); 

    // next file (sample2.txt) 
    _findnext(x, &fileinfo); 
    printf("%s" ,fileinfo.name); 

}