AGB  ·  Datenschutz  ·  Impressum  







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

fileExists zu schnell?

Ein Thema von Gambit · begonnen am 9. Apr 2005 · letzter Beitrag vom 9. Apr 2005
Antwort Antwort
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

fileExists zu schnell?

  Alt 9. Apr 2005, 23:25
Hallo,
ich möchte ein .tar.gz-File, nennen wir es Beispiel.tar.gz, entpacken. Dazu rufe ich externe kommandozeilen basierende Programme auf.

Zuerst muss ich das gz-File entpacken. Das mache ich mit Gunzip.exe
Danach soll das durch Gunzip enstandene tar-File entpackt werden. Das mache ich mit 7z.exe

Dabei habe ich festgestellt, das 7z scheinbar schon aufgerufen wird, wenn noch gar kein tar-File voliegt.

Daher habe ich nach der gz-Entpackroutine folgendes eingebaut:

repeat until fileExists('Beispiel.tar'); Aber das reicht scheinbar immer noch nicht, selbst wenn die Schleife beendet wird, bekommt 7z.exe das tar-File noch nicht zu packen. Erst wenn ich ein Sleep(100) nach der Schleife einbaue, wird das tar-File korrekt entpackt.

Kann es sein, dass fileExists schon true liefert, wenn das tar-File noch gar nicht auf der Festplatte und damit für 7z.exe nicht ladbar, vorliegt?

Gruß

Gambit
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: fileExists zu schnell?

  Alt 9. Apr 2005, 23:31
ist eigentlich alles ganz logich, damit in die 'Beispiel.tar' geschrieben werden kann muss diese natürlich erst angelegt werden. Sobald diese angelegt ist wird natürlich bei fileexists schon true zurück geliefert was ja aber nicht heißt das schon in die 'Beispiel.tar' geschrieben wurde. Ich würde dir empfehlen einfach mit der auführung des folgeprogrammes zu warten bis das erste beendet wurde.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#3

Re: fileExists zu schnell?

  Alt 9. Apr 2005, 23:42
Tja, aber woher weiß ich, dass Gunzip fertig ist? Deswegen hatte ich ja die Scheife zwischen den Aufruf der beiden Programme geschrieben. Ich rufe Gunzip folgendermaßen auf:

Delphi-Quellcode:
Procedure TForm1.DecompressFiles(applicationName, s: String);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  AppHWnd :HWND;
  ProcessId: DWORD;
  I: Integer;
begin
  AppHWnd := 0;
  FillChar(SI, SizeOf(TStartupInfo), 0);
  SI.cb := SizeOf(TStartupInfo);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := SW_HIDE;
  if CreateProcess(nil, PChar(extractFilePath(application.ExeName)+applicationName+s), nil, nil, False, 0, nil, nil, SI, PI) then
  begin
    WaitForInputIdle(PI.hProcess, INFINITE);
    CloseHandle(PI.hProcess);
    CloseHandle(PI.hThread);
  end;
end;
und der Aufruf dann:

DecompressFiles('gunzip ', extractFileName(FileList.Strings[i])); und danach jetzt mal ohne die repeat until-Schleife:

Delphi-Quellcode:
DecompressFiles('7z x ', ansiReplaceStr(extractFileName(FileList.Strings[i]),
                         extractFileExt(extractFileName(FileList.Strings[i])), ''));
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: fileExists zu schnell?

  Alt 9. Apr 2005, 23:44
such hier mal im forum nach createProcess, denn in dem zusammenhang gibts irgendwie sowas wie "waitforsingleobject" oder so ähnlich was bewirk das, das programm an der stelle wartet bis das programm welches mit createprocess gestartet wurde beendet ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: fileExists zu schnell?

  Alt 9. Apr 2005, 23:59
ja, WaitForSingleObject scheint zu helfen. Danke!
  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 02:08 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