2009-12-07 141 views
3

是否可以使用通配符在C/C++中從給定目錄打開文件?使用通配符從當前目錄打開文件C++

從某種意義上說,如果我想從我的程序中給定的當前目錄打開以「to(node_id)」結尾的文件。

示例:我需要打開文件名以「to4」結尾的文件。 所需輸出:它必須打開當前目錄中所有文件,文件名以「to4」結尾。 如果當前目錄中存在從0到4,從1到4,從2到4 & from3to4的文件,則必須打開它們。

如果在C/C++中不可能,是否還有其他允許這樣的編程語言?

+0

相關問題:http://stackoverflow.com/questions/1257721/can-i-use-a-mask-to-iterate-files-in-a-directory-with-boost。 – 2013-08-23 01:13:54

回答

4

不是標準的C++;您需要使用特定於操作系統的函數調用或像Boost.Filesystem這樣的文件系統庫。

無論哪種情況,您都可以獲取給定目錄中的文件列表,並遍歷列表並僅打開與您的參數匹配的列表。

4

你可以用C和C++來完成。在Windows上,你可以使用[FindFirstFileFindNextFilehttp://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx)

你的平臺可能已經爲你做它。如果你正在運行Unix,說你運行以下命令:。

$ ./myprog *to4 

外殼首先擴展通配符,然後在你的榜樣目錄執行myprog與擴展參數,相當於

$ ./myprog from0to4 from1to4 from2to4 from3to4 

你問到其他語言,所以下面的代碼是你會如何使用Perl做到這一點:

#! /usr/bin/perl 

foreach my $file (<*to4>) { 
    open my $fh, "<", $file or die "$0: open $file: $!\n"; 

    while (<$fh>) { 
    print "$file: $_"; 
    } 
} 

例如,首先創建的文件,然後運行打開它們的程序:

$ for i in 0 1 2 3; do 
> echo file $i > from${i}to4 
> done 

$ ./opento4s 
from0to4: file 0 
from1to4: file 1 
from2to4: file 2 
from3to4: file 3