2009-12-07 3 views
3

Можно ли открывать файлы из заданного каталога в C/C++ с помощью подстановочных знаков?Открыть файлы из текущего каталога с помощью подстановочного знака C++

В том смысле, если я хочу открыть файлы, заканчивающиеся на «to (node_id)» из текущего текущего каталога в моей программе.

Пример: Мне нужно открыть файлы, имена файлов которых заканчиваются на «to4». Желаемый результат: он должен открыть все файлы в текущем каталоге с именами файлов, которые заканчиваются на «to4». Если файлы из0to4, from1to4, from2to4 & from3to4 существуют в текущей директории, они должны быть открыты.

Если в C/C++ невозможно, существует ли какой-либо другой язык программирования, который позволяет это?

+0

Связанный с этим вопрос: http://stackoverflow.com/questions/1257721/can-i-use-a-mask-to-iterate-files-in-a-directory-with-boost. –

ответ

4

Не в стандарте C++; вам нужно будет использовать вызовы функций, специфичные для ОС, или библиотеку файловой системы, такую ​​как Boost.Filesystem.

В любом случае вы можете получить список файлов в заданном каталоге и перебрать по списку и открыть только те, которые соответствуют вашим параметрам.

4

Вы можете сделать это с помощью C и C++. В Windows, вы можете использовать [FindFirstFile и FindNextFile] (http://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 
Смежные вопросы