У меня есть 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» удаляется и документ становится пустым.
Пожалуйста, сообщите мне, как закрыть файл без опорожнения его содержимого.
Не используйте версию Perl с прошлого века. Обновите что-то текущее. 5.18.2 теперь стабильна. – Quentin
Используйте эксклюзивную [блокировку] (http://perldoc.perl.org/functions/flock.html), чтобы убедиться, что файл не используется. –
Возможно, это не лучший способ, но вы можете попробовать открыть DOC, чтобы добавить с помощью '>>' вместо того, чтобы clobber с '>'. Кроме того, вы можете просто проверить возвращаемое значение 'open', не сбрасывая с' eval'. Это не соответствует действительности. –