Schrift
[thread]10733[/thread]

unlink löscht Datei nicht "komplett"

Leser: 2


<< >> 6 Einträge, 1 Seite
amun-ra198
 2007-11-07 13:08
#101940 #101940
User since
2007-10-11
13 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe folgenden Effekt beobachtet, vielleicht kann einer von Euch das bestätigen:

Löscht man eine Datei (MS Windows / NTFS) mit Hilfe des perl Befehls unlink und erstellt kurz darauf (wenige Sek.) eine neue Datei mit genau dem gleichen Namen (z.B. mittels open ($xyz, "> blabla")) wird anstatt einer wirklich neuen die ursprüngliche Datei wiederhergestellt.
Ich habe das jetzt schon mehrfach beobachtet. Kann mir jemand sagen ob ich da ein Problem mit dem Dateisystem oder mit der Programmierung habe??

Danke
renee
 2007-11-07 13:14
#101941 #101941
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal Deinen Code!

Kann es sein, dass die Datei von einem anderen Prozess verwendet wird? Dann sperrt Windows die Datei nämlich und sie kann nicht gelöscht werden!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
amun-ra198
 2007-11-07 14:57
#101961 #101961
User since
2007-10-11
13 Artikel
BenutzerIn
[default_avatar]
Hallo,

der Code gibt an dieser Stelle leider nicht viel her:
Code: (dl )
1
2
3
4
if (-e "$parameters{Basedir}\\$parameters{FTP_control_file}")
{
unlink "$parameters{Basedir}\\$parameters{FTP_control_file}";
}


später hole ich eine Datei gleichen Namens dann per FTP ab und Stelle sie in das entsprechende Verzeichnis.
Code: (dl )
1
2
3
4
5
use Net::FTP;

...

$result=$ftp->get($control_file,"$destpath\\$control_file");


Zugriffsprobleme schließe ich eigentlich aus, da das Löschen der Datei einwandfrei funktioniert. Die Datei ist weg und ich erhalte auch keine Fehlermeldung.
Erstelle ich dann jedoch innerhalb kurzer Zeit danach eine neue Datei (egal wie) steht, inhaltlich, wieder die alte Datei dort. Wenn ich etwas länger warte und das gleiche Programm nochmal ausführe klappt es dann.

Vielleicht mal etwas, was man besser nachvollziehen kann (und was eventuell die gleiche Ursache hat):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
$file = 'irgendwas.log';
@test = ('was','genau','passiert','hier');
open (TEST, "> $file");
print TEST @test;
close TEST;

unlink $file;

@test1 = ('1','2','3','4','5');
open (TEST, "> $file");
print TEST @test1;
close TEST;


Zumindest auf meinem System (Windows XP) ändert sich das Erstellungsdatum der Datei wenn man das Skript mehrmals laufen läßt NICHT. Warum ist da so? Vielleicht ist das auch der Grund für obiges Phänomen.
pq
 2007-11-07 15:09
#101964 #101964
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
amun-ra198+2007-11-07 13:57:43--
Zugriffsprobleme schließe ich eigentlich aus, da das Löschen der Datei einwandfrei funktioniert.

woher weisst du das?
Quote
Die Datei ist weg und ich erhalte auch keine Fehlermeldung.

nunja, wenn du keine fehlermeldung ausgibst, siehst du auch keine. unlink liefert
0 zurueck, wenn es keine datei(en) loeschen konnte, und dann steht der
fehler in $!. du pruefst aber in deinem programm gar nicht den rueckgabewert.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
amun-ra198
 2007-11-07 15:12
#101965 #101965
User since
2007-10-11
13 Artikel
BenutzerIn
[default_avatar]
ok, aber wenn die Datei augenscheinlich nicht mehr in dem Verzeichnis steht kann ich doch davon ausgehen, dass sie gelöscht wurde, oder?
Struppi
 2007-11-08 11:40
#102017 #102017
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
und in dem Fall beobachtest du das Verhalten?

Warum machst du es nicht einfach so wie es dir empfohlen wird?
Und überprüfst den Rückgabewert von unlink, dann weißt du mehr.
<< >> 6 Einträge, 1 Seite



View all threads created 2007-11-07 13:08.