2012-12-13 4 views
4

Как создать новый файл, в котором я намерен писать в существующем каталоге, используя open() в Perl?Создать файл в каталоге с помощью Perl

Я пытался так:

my $existingdir = './mydirectory'; 

open my $fileHandle, ">>", "$existingdir/filetocreate.txt" or die "Can't open '$existingdir/filetocreate.txt'\n"; 

Но это не будет работать.

+4

Вместо «Невозможно открыть ...» сказать «Не удается открыть ...: $!» чтобы узнать точную причину ошибки. Либо ./mydirectory не существует, либо у вас нет писем perms. – Himanshu

+1

Это работает отлично, если 'mydirectory' существует в текущем рабочем каталоге, и у вас есть разрешение на его создание. – ikegami

+1

Да, этот код отлично подходит для меня. Еще одна вещь, чтобы проверить: вы уверены, что текущий рабочий каталог Perl - это то, что вы думаете? Проверьте с CWD: http://perldoc.perl.org/Cwd.html – dan1111

ответ

11
my $existingdir = './mydirectory'; 
mkdir $existingdir unless -d $existingdir; # Check if dir exists. If not create it. 
open my $fileHandle, ">>", "$existingdir/filetocreate.txt" or die "Can't open '$existingdir/filetocreate.txt'\n"; 
print $fileHandle "FooBar!\n"; 
close $fileHandle; 

Это должно сработать для вас.

+0

-1 OP хочет создать файл «в существующем каталоге». Это может привести к тому, что сценарий будет работать без смерти, но он не диагностирует и не разрешает фактическую проблему. – dan1111

+2

Ну, я вижу, что ответ был принят. Хотя я думаю, что моя точка зрения, я удалю свой downvote, так как вы успешно прочитали мнение OP о том, какова была настоящая проблема! – dan1111

+1

Лучше использовать File-Path 'mkpath', чем' mkdir' – ikegami

0

my $ FILE;

open ($ FILE, ">> File.txt") || die ("Не удается открыть файл:". $!);

закрыть ($ FILE);

вы можете добавить расположение каталога перед файлом File.txt.

Смежные вопросы