2014-02-20 8 views
1

У меня есть perl 5.005_30 версия.Perl Проверить, открыт ли файл

Перед выполнением какой-либо операции мне нужно проверить, используется ли файл «.doc».

Я написал следующий код.

my $doc = "D:\Test.doc"; 
eval{open FILE, ">$doc" or die "error"}; 
if([email protected]) 
{ 
    my $ERR_MSG ="Could not open the file \"$doc\" !\n Please close the file if it is already open and try again !!\n"; 

    open (LOGFILE, '>>Logfile.txt'); 
    print LOGFILE "$ERR_MSG\n"; 
} 
else 
{ 
    close(FILE); // close the opened file and start operations on ".doc" file using MS word API. 
    ... 
    ... 
} 

С помощью этого кода, если «Test.doc» уже открыт, он выводит сообщение об ошибке в лог-файл, который OK. Однако, если «Test.doc» еще не открыт, открытый метод открывает файл .doc и в состоянии else при закрытии файла [«close (FILE)»] существующее содержимое «Test.doc» удаляется и документ становится пустым.

Пожалуйста, сообщите мне, как закрыть файл без опорожнения его содержимого.

+2

Не используйте версию Perl с прошлого века. Обновите что-то текущее. 5.18.2 теперь стабильна. – Quentin

+1

Используйте эксклюзивную [блокировку] (http://perldoc.perl.org/functions/flock.html), чтобы убедиться, что файл не используется. –

+0

Возможно, это не лучший способ, но вы можете попробовать открыть DOC, чтобы добавить с помощью '>>' вместо того, чтобы clobber с '>'. Кроме того, вы можете просто проверить возвращаемое значение 'open', не сбрасывая с' eval'. Это не соответствует действительности. –

ответ

1

Это будет перезаписать:

eval{open FILE, ">$doc" or die "error"}; 

Вы можете попробовать открыть его для Append:

eval{open FILE, ">>$doc" or die "error"}; 
+0

Хотя я предполагаю, что API ожидает, что он все равно откроет сам файл, поэтому я не уверен, что все упражнение имеет смысл. –

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