Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi JPG mit der letzten Änderung (https://www.delphipraxis.net/104185-jpg-mit-der-letzten-aenderung.html)

EDatabaseError 28. Nov 2007 20:03


JPG mit der letzten Änderung
 
Delphi-Quellcode:
function FindLatestModifiedJPG(sPath: string): string;
var Data: TWin32FindData;
    LastModified: TDateTime;
    sTime: TSystemTime;
    FindHandle: Cardinal;
begin
  LastModified := 0;
  Result := '';
  sPath := IncludeTrailingPathDelimiter(sPath);
  FindHandle := FindFirstFile(PChar(sPath + '*.jpg'),Data);
  if FindHandle <> INVALID_HANDLE_VALUE then
    begin
      repeat
        if ((Data.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0) then
          begin
            FileTimeToSystemTime(Data.ftLastWriteTime,sTime);
            if (SystemTimeToDateTime(sTime) > LastModified) then
              begin
                LastModified := SystemTimeToDateTime(sTime);
                Result := Data.cFileName;
              end;
          end;
      until not FindNextFile(FindHandle,Data);
      Windows.FindClose(FindHandle);
    end;
end;
Moin,

ich habe hier ein kleines Problem mit mjpgs. Ich bekomme alle 2 Sekunden ein JPG mit zufälligen Namen. Mit dem obrigen Code ermittle ich die neueste (aktuelle) Bilddatei. Das Problem ab 500 Bildern wird der Code sehr sehr langsam. Kann man den Prozess beschläunigen?

Mfg
Tobi

Bernhard Geyer 28. Nov 2007 20:13

Re: JPG mit der letzten Änderung
 
Falls es ein NTFS-Dateisystem ist so lass dir doch vom Betriebssystem mitteilen welche Datei geändert/neu hinzugekommen ist indem du einen "Directory-Watcher" implementierst. Mir fällt leider gerade nicht das Schlagwort ein nachdem gesucht muss :-(

EDatabaseError 28. Nov 2007 20:18

Re: JPG mit der letzten Änderung
 
Ich hab auch nur das gefunden http://www.codeproject.com/vb/net/DirectoryWatcher.asp

Ich denke aber das soetwas mein Problem löst.

himitsu 28. Nov 2007 20:19

Re: JPG mit der letzten Änderung
 
Hab ich auch schon bemerkt, das liegt an FindFirstFile/FindNextFile und die brauchen halt bei vielen Dateien ihre Zeit.

Also wenn du auf diese WinAPIs baust, dann geht es nicht viel schneller, :cry:
aber eine andere Lösung ist mir noch nicht eingefallen.

Direkte Dateisystemzugriffe werden dirwohl nicht gefallen.
Die FAT/Verzeichnisstruktur oder die MasterFileTable(NTFS) selbst entschlüsseln ist nicht so einfach, wobei der Zugriff auf die MFT mit am Schnellsten sein könnte.


also Bernhard Geyer's Tipp mit ReadDirectoryChangesW währe wohl für dich am Optimalsten.

BenjaminH 28. Nov 2007 20:30

Re: JPG mit der letzten Änderung
 
Hallo,
Die Funktion ReadDirectoryChangesWReadDirectoryChangesW hat bei mir super Dienste geleistet. Damit funktioniert das perfekt.
[Edit]Man sollte alle Beiträge ganz durchlesen :wall:

EDatabaseError 28. Nov 2007 20:58

Re: JPG mit der letzten Änderung
 
Benjamin der CL Link führt ins leere ;-) könntest du mir bitte ein Code-Snippet posten ;-)

mkinzler 28. Nov 2007 22:26

Re: JPG mit der letzten Änderung
 
http://msdn2.microsoft.com/en-us/library/aa365465.aspx


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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