Hallo
Ich schreib zur zeit ein programm was viele datein kopieren sol...
es funzt auch schon recht gut, jedoch wird es nach ner weile recht langsam.
in der funktion "lesedatum" hatte ich zunächst FreeandNil(ImgData) vergessen, wodurch sich der genutzte
RAM aufgebläht hat. Doch auch dadurch läuft das prog nicht mit konstanter geschwindigkeit.
hat jmd ne ahnung warum es gegen ende immer langsamer wird?
hier der code
Delphi-Quellcode:
function LeseDatum(datei:string):string;
var ImgData: TImgData;
begin
ImgData := TImgData.Create;
DexifDecode := true;
ImgData.TraceLevel := 1;
if ImgData.ProcessFile(datei) then
if ImgData.HasExif then
LeseDatum := ImgData.ExifObj.DateTime
else
lesedatum := ''
else
lesedatum :='';
FreeAndNil(ImgData);
end;
function TForm1.trennedatum(datum:string) : TStrArray;
begin
trennedatum[0] := Copy(datum, 1, 4);
trennedatum[1] := Copy(datum, 6, 2);
trennedatum[2] := Copy(datum, 9, 2);
trennedatum[3] := Copy(datum, 12, 2);
trennedatum[4] := Copy(datum, 15, 2);
trennedatum[5] := Copy(datum, 18, 2);
end;
procedure TForm1.kopierebilder;
var
i : integer;
jahr,mon,tag : string;
n_jahr,n_mon,n_tag : string;
fileSource, fileDest: string;
begin
Progressbar1.Max:=Liste.Count-1;
ListBox1.Clear;
for i:=0 to Liste.Count-1 do
begin
Label1.Caption := inttostr(Liste.Count) + ' / ' + inttostr(Liste.Count) + ' Bilder kopiert.';
ListBox1.Items.Add(Liste[i]);
Progressbar1.Position :=i;
if LeseDatum(Liste[i]) <> '' then
begin
jahr := trennedatum(LeseDatum(Liste[i]))[0];
mon := trennedatum(LeseDatum(Liste[i]))[1];
tag := trennedatum(LeseDatum(Liste[i]))[2];
n_jahr := Ziel + '\' + jahr;
n_mon := Ziel + '\' + jahr + '\' + jahr + '_' + mon;
n_tag := Ziel + '\' + jahr + '\' + jahr + '_' + mon + '\' + jahr + '_' + mon + '_' + tag + '-';
{$IOChecks off}
if not(DirectoryExists(n_jahr)) then
mkdir(n_jahr);
if not(DirectoryExists(n_mon)) then
mkdir(n_mon);
if not(DirectoryExists(n_tag)) then
mkdir(n_tag);
{$IOChecks on}
fileSource := Liste[i];
fileDest := n_tag + '\' + ExtractFileName(Liste[i]);
end
else
begin
if not(DirectoryExists(Ziel + '\zeitlos')) then
mkdir(Ziel + '\zeitlos');
fileSource := Liste[i];
filedest := Ziel + '\zeitlos' + '\' + ExtractFileName(Liste[i]);
end;
//ListBox1.Items.Add(filesource);
//ListBox1.Items.Add(filedest);
CopyFile(PChar(fileSource), PChar(fileDest), true);
SendMessage(ListBox1.Handle, LB_SETTOPINDEX, ListBox1.Items.Count-1, 0);
end;
Progressbar1.Position :=0;
end;