Autor Beitrag
Knaecke
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 30

WIN 2000, WIN XP, Gentoo
D5 Enterprise
BeitragVerfasst: Mi 23.11.05 16:55 
Kann es sein, dass bei folgendem Code unter Umständen eher die Datei umbenannt wird, ehe sie vollständig gespeichert ist??

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
filename := 'trallala.xml';

//...

slXML.SaveToFile(filename+'.part');
slXML.Free();
RenameFile(filename+'.part',filename);


Wohl eher nicht, denk ich mal.

Kann es dann sein, dass eine XML im Anhang einer Mail nur teilweise übertragen wird? Aber die Übertragung wird doch nur nach Abschluss "erfolgreich" beendet oder? Also müsste ich davon ausgehen, dass auch der Anhang komplett da ist.

Zur Erklärung: Ich hab hier auf einem Rechner einen Service laufen, der Mails mit XML-Anhängen von einem Server holt und die XMLs zur weiteren Bearbeitung auf der Platte speichert. (siehe Code oben) Ein weiterer Service schaut nach diesen XML-Dateien und bearbeitet genau diese. Heute hab ich es zum ersten Mal erlebt, dass sich der zweite Service aufgehangen hat, weil ein XML-File unvollständig war.

Es kann also eigentlich nur eine dieser Fehlerquellen sein. Aber irgendwie sind mir beide Möglichkeiten eher unwahrscheinlich. Die XMLs werden auf einer Webseite von einer Flashanwendung generiert und per PHP an den Mailserver geschickt, von dem die Mails durch den Service abgeholt werden. Desweiteren schick ich eine Sicherheitskopie der Mail an einen anderen Mailserver. Bei diesem war das XML vollständig. Daher geh ich davon aus, dass die erste Mail auch ok war.

Habt ihr irgendwelche Ideen woran das liegen könnte?

_________________
"Kekskrümel im Bett pieksen weniger, wenn man vorher darauf uriniert", meinte mal ein Kumpel... ;)


Zuletzt bearbeitet von Knaecke am Fr 02.12.05 16:44, insgesamt 2-mal bearbeitet
Knaecke Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 30

WIN 2000, WIN XP, Gentoo
D5 Enterprise
BeitragVerfasst: Do 01.12.05 18:39 
Da das Problem nun schon wieder auftrat, hab ich mir das Problem nochmals angeschaut:

Den Service zum Mailholen hab ich nun so angepasst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
filename := 'trallala';

slXML.SaveToFile(filename+'.part');
slXML.Free();

RenameFile(filename+'.part',filename+'.xml');


Also vorher hatte ich eine Datei trallala.xml.part, wenn sie auf die Platte geschrieben wurde, nun heißt sie nur trallala.part.

Ich hatte nun noch eine zusätzliche Vermutung, dass der zweite Service, der dann das XMl braucht, schon auf die unvollständige Datei zugreift. Das mach ich per FindFirst():

ausblenden Delphi-Quelltext
1:
findOK := FindFirst('*.xml', faAnyfile, sr);					


Kann es sein, dass FindFirst auch auf Dateien zugreift, die nach dem .xml noch was stehen haben? Sozusagen auf .xml* ? Nur dürfte der zweite Service doch noch gar keinen Zugriff auf die Datei haben, solange der erste Service diese Datei noch schreibt oder überseh ich da irgendwas?

Allerdings weiß ich nicht, ob das nun schon die Lösung sein könnte, wie oben angegeben, indem ich die Datei erst nach dem vollständigen Speichern .xml nenne, da der Fehler einfach mal nur per Zufall reproduzierbar zu sein scheint... :(
Hat ja noch jemand eine Idee bzw. kann mir weiterhelfen? Mir fällt mittlerweile nichts mehr ein :(

_________________
"Kekskrümel im Bett pieksen weniger, wenn man vorher darauf uriniert", meinte mal ein Kumpel... ;)
Knaecke Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 30

WIN 2000, WIN XP, Gentoo
D5 Enterprise
BeitragVerfasst: Fr 02.12.05 16:44 
Hat hier keiner mehr eine Idee? *heul* Schreibt doch wenigstens mal was, vielleicht ergibt sich ja in einer Diskussion noch die ein oder andere Möglichkeit, die ich bisher übersehen habe. Ich weiß nicht mehr weiter und der Kunde regt sich auch auf, dass es bei ihm abschmiert.

Ich hab noch rausgefunden, dass in beiden Fällen das XML nach
ausblenden Quelltext
1:
<BR					

zu Ende war. Komischerweise waren beide auch genau 1483 Bytes groß, obwohl vorher ganz andere Sachen drinstehen. Ob das damit was zu tun haben könnte?

Oder könnte es daran liegen, dass beim Kunden Win XP läuft (bei ihm geht es nicht) und ich hier mit 2000 keine Probleme hab? Leider ist das ganze irgendwie voll willkürlich, daher kann ich den Fehler nicht nachvollziehen...

Ich wär euch auf alle Fälle sehr dankbar, wenn ihr mich nicht ganz alleine lasst mit dem Problem...

_________________
"Kekskrümel im Bett pieksen weniger, wenn man vorher darauf uriniert", meinte mal ein Kumpel... ;)