Autor Beitrag
Tristan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Fr 19.05.06 20:02 
Im Moment nutze ich die Komponenten Trivialftp zum senden von mehreren Dateien mit dem Prinzip:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
For i:=Files.Count-1 downto 0 do
   Begin
   If Pos('SETUP',Files.Strings[i])>0 then SettingFTP.Put('SETUP.ini','InstallierteSoftware.ini');
   If Pos('Freigaben',Files.Strings[i])>0 then SettingFTP.Put('Host.ini','Einstellungen.ini');
   If Pos('Webfilter',Files.Strings[i])>0 then SettingFTP.Put('WebFilter.ini','Webfilter.ini');
   End;


Beim Empfänger wird bei Übertragungsende (OnTransfercomplete) ein Timer aktiv, der versucht alle Dateien neu auszulesen um neue Einstellungen zu empfangen. Beim Ereignis (OnReadfile & OnWriteFile) wird der Timer deaktiviert um Zugriffsverletzungen auszuschließen.

Dennoch kommt es jedes Mal zu einem Fehler (Auf die Datei Webfilter.ini kann nicht zugegriffen werden, da ein anderer Prozess darauf zugreift)

Gibt es eine Möglichkeit zu prüfen ob die Datei gerade verwendet wird bzw. ankommende Dateien effektiver auszuwerten. Die Lösung mit dem Timer ist doch leider sehr unsauber. Oder kennt ihr noch eine andere zuverlässigere Methode Dateien zu versenden?

Es melden sich mehrere Clients an meinem Hauptprogramm an und jeder Client will die neusten Einstellungen empfangen. Dabei sollte garantiert sein, dass jeder diese auch bekommt. Evtl. könnte man auch eine Warteschleife integrieren?

Könnt ihr mir da weiterhelfen?
Danke
Tristan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: So 21.05.06 16:30 
sorry dass ich so mit Fragen zu bombe, aber meine Abschlussarbeit in Delphi hat noch Haufen Fehler und ich muss die in 14 Tagen vor einem Komitee präsentieren.

Ich habe jetzt bei dem obengenannten Problem festgestellt, dass der Fehler beim Senden der Files und nicht beim empfangen verursacht wird. Und zwar sieht der gesamte Code zum senden momentan so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
/Verbinden....
If SettingFTP.Host<>host then
  Begin SettingFTP.Active:=false; SettingFTP.Host:=Host; SettingFTP.Active:=True; End //Adresse zuweisen wenn anders verbunden
 else
 Begin //Wenn Host bereits übereinstimmt beginnen und verbinden
  SettingFTP.Active:=false;
  SettingFTP.Active:=True;


  //Queue abarbeiten
  For i:=Files.Count-1 downto 0 do
   Begin
   If Pos('SETUP',Files.Strings[i])>0 then SettingFTP.Put(ExtractFilePath(ParamStr(0))+'\Clients\'+Host+' SETUP.ini','InstallierteSoftware.ini');
   If Pos('Freigaben',Files.Strings[i])>0 then SettingFTP.Put(ExtractFilePath(ParamStr(0))+'\Clients\'+Host+'.ini','Einstellungen.ini');
   If Pos('Webfilter',Files.Strings[i])>0 then SettingFTP.Put(ExtractFilePath(ParamStr(0))+'\Clients\WebFilter.ini','Webfilter.ini');

   End;

Diese Prozedur wird jedoch teilweise kurz hintereinander aufgerufen, sodass die laufende Übertragung abgebrochen wird und der Prozess von neuem beginnt. Obwohl ich die Verbindugn mit Active:=false trenne, scheinen die Dateien trotzdem noch gelesen zu werden. Wenn man dann erneut senden will, hängt sich das Programm an seiner eigenen Procedure auf.

Hättet ihr eine Idee wie man dieses Problem unterbinden könnte?

Wäre euch sehr verbunden;-)