2016-05-15 14 views
1

Ich arbeite an einem Perl-Skript, wo ich den Inhalt von mehreren Remote-Dateien auf Diferents-Servern überprüfen muss. Inside my Schleife habe ich dies:perl - Dateien sicher öffnen

my $file = "\\\\$myserver\\c\$\\$mydirectory\\$myfile"; 
if (open (FILE, "<", $file)) 
{ 
    # do some work 
    close (FILE); 
} 

Dies funktioniert gut die meisten, wenn die Zeit, aber heute habe ich ein sehr spezifisches Problem hatte. Einer der Server hatte sein Windows-Verzeichnis gelöscht und reagierte nicht. Ich war nicht einmal in der Lage, das Terminal zu töten, auf dem das Skript läuft. Also begann ich online einen Weg zu suchen, eine Auszeit zu hatte, aber nach langer Suche fand ich diese:

Blocking I/O auf mswin32

Alarm (2) nicht unterbricht I blockiert/O auf MSWin32, so 'Timeout' wird das auch nicht tun.

Da fast alle Lösung die Funktion Alarm verwenden, habe ich keine Ahnung, wie ich verhindern kann, dass meine Skriptform wieder festklebt.

PS: Ich habe versucht, Systemaufrufe zu verwenden, um die Datei zu drucken, aber ich habe das gleiche Problem sogar direkt aus einem cmd und nicht innerhalb des Skripts.

Antwort

0

Ich glaube die corect Syntax zum Öffnen einer Datei ist:

my $file = "\\\\$myserver\\c\$\\$mydirectory\\$myfile"; 
open my $fh, '<', $file 
    or die "Cannot open $file for reading: $!"; 
+0

Ich bin nicht sicher, dass das Problem tatsächlich hilft. Die Methode, die das OP verwendet, um zu testen, ob es funktioniert hat, ist in Ordnung - es ist nur die Blockierung, die auch nicht funktionieren würde. – Sobrique

+0

Ich stimme Ihnen zu, es ist eine elegantere Möglichkeit, Datei zu öffnen, aber es ist nicht mit meinem Problem verbunden –