Schrift
[thread]12453[/thread]

*.bat löschen (Seite 3)

Leser: 1


<< |< 1 2 3 4 >| >> 34 Einträge, 4 Seiten
Snicker
 2008-09-10 00:38
#114457 #114457
User since
2008-08-09
25 Artikel
BenutzerIn
[default_avatar]
hatte vergessen zu schreiben, dass ich beide Varianten ausprobiert habe. Einmal mit und einmal ohne fork;
Resultat war immer das selbe. Erst wird die Batch gestartet, der "Sleep" Befehl wird initialisiert, dann kann die Batchdatei kein File löschen, es kommt die dazu gehörige Fehlermeldung und am Ende schließt sich das Fenster.
Das merkwürdige daran ist aber, ich wollte mir die Fehlermeldung genauer anschauen und habe daher nach dem exec Befehl einfach <STDIN> eingefügt. Habe durch use warnings; die Meldung bekommen, dass die letzte Zeile mit <STDIN> nicht erreicht wird. War auch so der Fall.

Ich verstehe nicht, warum sich das Fenster nicht schließen lassen lässt, bevor die Batch mit dem Löschen aktiv wird.
Gast Gast
 2008-09-10 00:42
#114459 #114459
"exec" führt ein Programm mit der selben ProzessID aus die das Perlscript hatte, bleibt dann nicht das Fenster auf?

@Snicker
Schließt du die Dateihandle nicht wieder? "close(handle)" Danach solltest du die Dateien ohne Probleme handhaben können.
Was anderes kann ich mir nicht vorstellen...
Linuxer
 2008-09-10 12:46
#114476 #114476
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
Es liegt in der Natur des exec(), dass Code, der danach steht, nicht erreicht wird! Die perldoc (Link in Beitrag 16) erzählt das Warum.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Snicker
 2008-09-12 17:39
#114571 #114571
User since
2008-08-09
25 Artikel
BenutzerIn
[default_avatar]
Gast+2008-09-09 22:42:10--
Schließt du die Dateihandle nicht wieder? "close(handle)" Danach solltest du die Dateien ohne Probleme handhaben können.
Was anderes kann ich mir nicht vorstellen...

ah! Jetzt werden die *.bat Datein gelöscht. Es lag hier an dem fehlendem close Befehl.

Nur kann ich noch vom anderen Dateityp die jeweils letzte Datei nicht löschen. Bekomme keinen Zugriff, auch wenn ich die Datei schließe und dann löschen will. Selbst in einer Schleife mit dem "sleep" befehl haut es nicht hin. Windows gewährt mir keinen Zugriff

hier ein Ausschnitt aus dem Quelltext.
Code (perl): (dl )
1
2
3
4
5
while (-e "$modelldatei$q$einstellungen_para_wert[1]"){
        close ("$modelldatei$q$einstellungen_para_wert[1]");
        unlink ("$modelldatei$q$einstellungen_para_wert[1]") or warn "$!";
        sleep (1);
}
Gast Gast
 2008-09-12 18:16
#114574 #114574
Das HANDLE Schließen:
Beispiel:

entweder:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;

my $filename='/pfad/zur/datei.txt';
open(my $handle,'>', $filename) or die "Fehler open $filename ($!)";
print $handle "Etwas Text\n";
close($handle);


oder:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;

my $filename='/pfad/zur/datei.txt';
open(HANDLE,'>', $filename) or die "Fehler open $filename ($!)";
print HANDLE "Etwas Text\n";
close(HANDLE);
Snicker
 2008-09-12 19:50
#114578 #114578
User since
2008-08-09
25 Artikel
BenutzerIn
[default_avatar]
Danke! Jetzt funktioniert es! Alle Dateien werden gelöscht!!
Gast Gast
 2008-09-12 21:07
#114582 #114582
Du solltest wirklich ein perl-Tutorial lesen...
GwenDragon
 2008-09-13 14:16
#114586 #114586
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
Auch ein close und print gehört auf Dateifehler geprüft.
Es ist naiv anzunehmen, dass immer alles bei Dateioperationen klappt.
murphy
 2008-09-13 16:14
#114599 #114599
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
GwenDragon+2008-09-13 12:16:15--
Auch ein close und print gehört auf Dateifehler geprüft. [...]


Soweit ich weiß, setzt print, wenn es einen Fehler entdeckt hat, ein internes Flag auf dem betreffenden Dateihandle, welches wiederum von close ausgelesen wird, um den Fehler weiterzureichen. Wenn also irgendwann ein print fehlschlug, übersieht man den Fehler auch dann nicht, wenn man nur nach close eine Statusabfrage macht.
When C++ is your hammer, every problem looks like your thumb.
Snicker
 2008-09-13 23:37
#114620 #114620
User since
2008-08-09
25 Artikel
BenutzerIn
[default_avatar]
Gast+2008-09-12 19:07:50--
Du solltest wirklich ein perl-Tutorial lesen...

hab ein Einstiegerbuch gelesen, indem stand drin, dass oft ausreicht, wenn man print etc. schreibt, da Perl die Anwenung selbständig schließt, wenn erneut auf diese zugegriffen wird.
Hab jedoch im Laufe der Zeit mitbekommen, dass das Buch nicht optimal geschrieben ist und viele wichtige Dinge zwar mal am Rande erwähnt, aber nicht wirklich erklärt.
<< |< 1 2 3 4 >| >> 34 Einträge, 4 Seiten



View all threads created 2008-09-08 13:45.