AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warten bis die Datei da ist .....

Ein Thema von Ricane · begonnen am 18. Mär 2004 · letzter Beitrag vom 18. Mär 2004
Antwort Antwort
Benutzerbild von Ricane
Ricane

Registriert seit: 21. Mär 2003
Ort: Quickborn
170 Beiträge
 
Delphi 7 Architect
 
#1

Warten bis die Datei da ist .....

  Alt 18. Mär 2004, 13:54
Moinsen,

habe ein Problem über dem ich schon etwas länger brüte... Hier erstmal der Quellcode:

Delphi-Quellcode:
  Result := 0;
  Anhang := TStringList.Create;
  Anhang.Add(Schluessel);
  Anhang.SaveToFile(ExtractFilePath(ParamStr(0)) + 'K.txt');

  CopyFile(PChar(OpenDialog1.FileName),
    PChar(ExtractFilePath(ParamStr(0)) + 'Crypt.bmp'), False);

  Anhang.Clear;
  Anhang.Add('copy /b Crypt.BMP + /b K.txt Crypt.BMP');
  Anhang.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Launch.bat');

  While (FileExists(ExtractFilePath(ParamStr(0)) + 'Crypt.bmp') = False) Or
    (FileExists(ExtractFilePath(ParamStr(0)) + 'K.txt') = False) Or
    (FileExists(ExtractFilePath(ParamStr(0)) + 'Launch.bat') = False) Do
    Application.ProcessMessages;

  While Result < 32 Do
    Result := ShellExecute(
      Handle, 'open', PChar(ExtractFilePath(ParamStr(0)) + 'Launch.bat'), Nil,
      PChar(ExtractFilePath(ParamStr(0))), SW_Normal);

  AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT');
  Erase(Datei);
  AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'LAUNCH.BAT');
  Erase(Datei);
Das klappt alles wunderbar, es wird kein Felher ausgeworfen, aber der Befehl aus der Batch Datei wird nicht korrekt ausgeführt...

Lasse ich die letzten vier Zeilen weg und führe den Befehl "per Hand" aus dem Explorer aus, habe ich keine Probleme. Also war mein Verdacht das die Crypt.bmp noch nicht vorhanden ist, wenn er die Batch Datei ausführen will, aber laut FileExist ist sie das... (im Explorer taucht sie aber erst später auf... weiss nicht ob FileExist das richtige zurück liefert!)

Was kann man da tun?! Leider kann ich auch nicht die Meldung sehen, die die Batch Datei zurück liefert, denn ich weiss nicht wie ich die dazu überreden kann nicht sofort wieder zu verschwinden...

Beste Grüsse,

Ricane
Hendrik
So much to Code... so less Time....

www.RicaneSoftware.de
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#2

Re: Warten bis die Datei da ist .....

  Alt 18. Mär 2004, 14:18
Hallo ricane,
wie ich das hier sehe, hatte ich dieses Problem auch schon mal:

Eine .BAT führte ich mittels ShellExecute aus, die .BAT Datei erstellte
'ne EXE Datei und die neue EXE wollte ich auch mittels ShellExecute ausführen.
Das ging aber nicht, weil sie scheinbar noch nicht da war!

Die Lösung hierzu lautet geduldig sein. Ich habe einfach ein ...
sleep(500); ... eingebaut und dann ging's bei mir.
Mein Shellexecute musste quasi einfach auf meine .BAT Datei warten.
Versuch's mal.
Zitat:
Leider kann ich auch nicht die Meldung sehen, die die Batch Datei zurück liefert, denn ich weiss nicht wie ich die dazu überreden kann nicht sofort wieder zu verschwinden...
Die letzte Zeile Deiner .BAT lautet ab jetzt einfach mal ...
Code:
pause
...und dann wartet sie schön artig auf einen Tastendruck, bevor sie sich schließt.

Gruß
DANNYBOY
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Benutzerbild von Ricane
Ricane

Registriert seit: 21. Mär 2003
Ort: Quickborn
170 Beiträge
 
Delphi 7 Architect
 
#3

Re: Warten bis die Datei da ist .....

  Alt 18. Mär 2004, 14:29
Zitat von Dannyboy:
[...]
Die Lösung hierzu lautet geduldig sein. Ich habe einfach ein ...
sleep(500); ... eingebaut und dann ging's bei mir.
[...]


Also nachdem ich gemerkt habe das deine Sleep Lösung auch nicht klappt, wurde ich irgendwie misstrauisch....

Habe es jetzt gelöst, aber warum das die Lösung ist, weiss ich irgendwie auch nicht... Ich habe einfach folgende Zeilen als Kommentar gesetzt:

Delphi-Quellcode:
(*
  AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT');
  Erase(Datei);
  AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'LAUNCH.BAT');
  Erase(Datei);
*)
Aber warum ist das die Lösung?! Dieser Code wird doch viiiiiiiiiiiiiiel später ausgeführt, als der ShellExecute Befehl... würde mich mal interessieren warum, aber da meine Frage beantwortet ist, setze ich diesen Thread erstmal auf "Beantwortet"


Beste Grüsse,

Ricane
Hendrik
So much to Code... so less Time....

www.RicaneSoftware.de
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Warten bis die Datei da ist .....

  Alt 18. Mär 2004, 15:09
Ist dir aufgefallen, wie oft du ExtractFilePath(ParamStr(0))geschrieben hast ?
Also schnell eine Funktion draus machen:
Delphi-Quellcode:
function ApplicationPath: string;
begin
   Result := ExtractFilePath(ParamStr(0));
end;
Zitat:
AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT');
Erase(Datei);
Das ist natürlich alter Quark aus der Pascalära.

Dateien löscht man so:
DeleteFile(const FileName: string); // aus Unit SysUtils

Schau mal auf www.delphipraxis.net/topic21144.html.
Dort wird gezeigt, wie man Dateien ohne Batchdatei verkettet.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz