Открывать файлы из текущей директории, используя подстановочный знак C ++ - PullRequest
3 голосов
/ 07 декабря 2009

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

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

Пример: мне нужно открыть файлы, имена файлов которых заканчиваются на «to4». Требуемый вывод: он должен открыть все файлы в текущем каталоге с именами файлов, которые заканчиваются на «to4». Если в текущем каталоге существуют файлы от 0 до 4, от 1 до 4, от 2 до 4 и от 3 до 4, они должны быть открыты.

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

Ответы [ 2 ]

4 голосов
/ 07 декабря 2009

Вы можете сделать это с 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
4 голосов
/ 07 декабря 2009

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

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

...