Ошибка при использовании сложных имен файлов для tar -> запись в Perl - PullRequest
0 голосов
/ 10 ноября 2010

При использовании tar-> write () я получаю ошибки при использовании сложных имен файлов.

Код:

my $filename= $archive_type."_".$from_date_time."_".$to_date_time."tar";
$tar->write($filename);

Я получаю ошибку: Не удалось создать дескриптор файла для 'postProcessProbe_2010 / 6/23 / 3_2010 / 6/23 / 7.tar':

Нет такого файла или каталога в строке test.pl 24

Если я изменю $ filename на простую строку, например, out.tar, все будет работать.

1 Ответ

4 голосов
/ 10 ноября 2010

Ну, / - это разделитель каталогов в * nix системах (и внутренне Windows обрабатывает / и \ взаимозаменяемо), и я считаю, что tar файлы, независимо от платформы, используют его внутри как разделитель каталогов.

Я не думаю, что вы можете создавать имена файлов, содержащие / в системах * nix или Windows.Даже если бы вы могли, это, вероятно, вызвало бы целую кучу головных болей в будущем.

Было бы лучше, по моему скромному мнению, перейти на более разумный формат даты, такой как YYYYMMDD.

Кроме того, вы используете конкатенацию строк, когда sprintf было бы намного понятнее:

my $filename= sprintf '%s_%s_%s.tar', $archive_type, $from_date_time, , $to_date_time;

...