Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Grafik speichern und +1 benennen!? (https://www.delphipraxis.net/97902-grafik-speichern-und-1-benennen.html)

woggly4 18. Aug 2007 10:59


Grafik speichern und +1 benennen!?
 
Hallo, ich habe ein Problem!
Ich würde gerne ein Programm schreiben, mit dem ich per ButtonClick eine Grafik aus dem Internet (Adresse bleibt gleich) auf meiner Festplatte abspeichern kann. Besonderheit: Ich möchte, dass er die Grafik beim ersten Click 001.jpg nennt und beim zweiten 002.jpg. Halt, dass sich der Dateiname immer um einen (+1) erhöht.

Kann mir jemand helfen?

mkinzler 18. Aug 2007 11:02

Re: Grafik speichern und +1 bennen!?
 
Wo besteht genau das Problem:
Es gibt 2 Möglichkeiten du speicherst die höchste bzw. Nächste Zahl oder du ermittelst diese dynamisch.

PigfaceJoe 18. Aug 2007 11:05

Re: Grafik speichern und +1 benennen!?
 
Hi,
ganz einfach: Du deklarierst ne Variable global unter Implementation und setzt die anfangs auf 0 (ONCreate). Dann erhöhste die jedes mal , wenn die datei heruntergeladen wird...

Gruss
PigfaceJoe

SirThornberry 18. Aug 2007 11:10

Re: Grafik speichern und +1 benennen!?
 
Zitat:

Zitat von PigfaceJoe
Hi,
ganz einfach: Du deklarierst ne Variable global unter Implementation und setzt die anfangs auf 0 (ONCreate). Dann erhöhste die jedes mal , wenn die datei heruntergeladen wird...

Gruss
PigfaceJoe

Oder noch besser - wenn wir schon ein Object namens TForm1 etc. haben können wir auch im private die Variable declarieren - macht ja schließlich nicht viel sinn objectorientiert und global zu vermischen wenn es auch anders geht ohne Aufwand.

PigfaceJoe 18. Aug 2007 11:13

Re: Grafik speichern und +1 benennen!?
 
Hi,
Sry, aber ich hab in der Schule halt nur die Methode gelernt unter implementation , was genau ist denn da jetzt der Unterschied?

eddy 18. Aug 2007 11:13

Re: Grafik speichern und +1 benennen!?
 
Hallo woggly4,

hier ein bißchen Code zum Probieren:

Delphi-Quellcode:
// liefert filename mit angehängter _nnnn (mit n=0,1,..,9)
// falls Quelldatei bereits auf eine Nummer _nnnn endet, wird diese bis auf die
//   nä. freie Nummer hochgezählt z.B. Test_0005.DB --> Test_0007.DB (falls Test_0006.DB bereits vorh. ist)
function GetNextFileName(pfn : string) : string;
var
  fpath,
  fn, fext,
  s, hs : string;
  i : integer;
  gefu : boolean;
begin
  fpath := ExtractFilePath(pfn);
  s := ChangeFileExt(ExtractFileName(pfn), '');
  gefu := copy(s,length(s)-4,1) = '_';
  if gefu then begin
    for i := 3 downto 0 do begin
      gefu := gefu and (Pos(copy(s,length(s)-i,1), '0123456789') > 0);
    end;
  end;
  if gefu then begin
    hs := copy(s,length(s)-3,4);
    i := StrToInt(hs);
    fn := copy(s, 1, length(s) - 5);
  end
  else begin
    i := 0;
    fn := s;
  end;
  fext := ExtractFileExt(pfn);
  repeat
    inc(i);
    hs := IntToStr(i);
    while length(hs) < 4 do hs := '0' + hs;
    s := fn + '_' + hs + fext;
  until not FileExists(IncludeTrailingBackslash(fpath) + s);
  Result := s;
end;
Die Funktion ist noch ein bißchen unflexibel, aber Du kannst sie ja entsprechend Deinen Wünschen anpassen.

mfg
eddy

woggly4 18. Aug 2007 11:39

Re: Grafik speichern und +1 benennen!?
 
Danke schonmal für die Hilfe, aber ich kann das jetzt leider nicht testen, weil mein Delphi gerade irgendwelche Probleme hat. Wenn es wieder funktioniert, werde ich mich da mal ransetzen. Danke. :thumb:

(Ich lass' das Thema noch als offene Frage, falls es nicht funktionieren sollte.)

DeddyH 18. Aug 2007 12:29

Re: Grafik speichern und +1 benennen!?
 
Ich hätte auch noch einen Vorschlag:
Delphi-Quellcode:
function GetNextFreeFileName(const FileName: string;
                             const sFormat: string = '%.3d'): string;
var i: integer;
    sPath, sExt: string;
begin
  sPath := IncludeTrailingBackslash(ExtractFilePath(FileName));
  sExt := ExtractFileExt(FileName);
  i := 0;
  repeat
    inc(i);
    Result := sPath + Format(sFormat,[i]) + sExt;
  until not FileExists(Result);
end;
Aufrufen lässt sich das z.B. so:
Delphi-Quellcode:
ShowMessage(GetNextFreeFileName('C:\001.txt'));


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