Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bilder einlesen und unter neuem namen speichern (https://www.delphipraxis.net/109879-bilder-einlesen-und-unter-neuem-namen-speichern.html)

shirocko 9. Mär 2008 13:57


bilder einlesen und unter neuem namen speichern
 
hi leute,
ich habe schon im forum gesucht, bin aber nicht wirklich draus schlau geworden, bzw. hab nicht wirklich was passendes gefunden.
Ich habe folgendes vor. Ich möchte ein Liste von Dateien in einem Ordner einlesen. Die Dateiname möchte ich z.B. in einem Array speichern, in eine andere Form bringen und die neuen Dateinamen jeweils speichern zum passenden Bild.
Mein Problem besteht nun darin:
1. wie lese ich eine reihe von dateien in einem ordner ein und speicher diese
2. wie speicher ich die fertigen namen wieder ab zur passenden datei

danke schonmal im voraus für eure hilfe.

DeddyH 9. Mär 2008 14:08

Re: bilder einlesen und unter neuem namen speichern
 
Such mal nach FindAllFiles, da kannst Du schön sehen, wie manmit FindFirst, FindNext und FindClose arbeitet. Und statt eines Arrays solltest Du vielleicht eine StringListe verwenden, die kannst Du mit SaveToFile ganz easy abspeichern.

shirocko 9. Mär 2008 14:45

Re: bilder einlesen und unter neuem namen speichern
 
hi gibs das nicht einen einfachen dialoig zum datei einlesen und speichern in array z.b. und dann dieses speichern ist ja okay. aber es muss doch einen dialog geben zum einlesen mehrerer dateien. oder nicht.

DeddyH 9. Mär 2008 14:47

Re: bilder einlesen und unter neuem namen speichern
 
Ich weiß nicht, ob ich Dich richtig verstehe, aber schau Dir mal den TOpenDialog an (mit der Option ofAllowMultiSelect).

shirocko 9. Mär 2008 15:32

Re: bilder einlesen und unter neuem namen speichern
 
hm okay soweit bin ich jetzt, also ich hab über eine Schaltfläche "Durchsuchen" jetzt den Dialog geöffnet und man kann mehrere Dateien auswählen. wenn ich jetzt über die eigenschaft opendialog1.filename gehe habe ich ja nur den pfad zu einer datei, bei files geht es ja für mehrere. so nun will ich allerdings nur den dateinamen und nicht den pfad zum bearbeiten. wie speicher ich jetzt nacheinander die dateinamen von den ausgewählten dateien in einem array oder einer stringliste wie du meintest?

DeddyH 9. Mär 2008 15:36

Re: bilder einlesen und unter neuem namen speichern
 
Z.B. so:
Delphi-Quellcode:
var sList: TStringList;
    i: integer;
begin
  if OpenDialog1.Execute then
    begin
      sList := TStringList.Create;
      try
        for I := 0 to OpenDialog1.Files.Count - 1 do
          sList.Add(ExtractFileName(OpenDialog1.Files[i]));
        sList.SaveToFile('C:\Test.txt');
      finally
        sList.Free;
      end;
    end;
end;

shirocko 9. Mär 2008 15:54

Re: bilder einlesen und unter neuem namen speichern
 
okay danke das funktioniert soweit, jetzzt muss ich ja die txt datei auslesen, um die dateien umzubennen. wie heist das die funktion?

DeddyH 9. Mär 2008 15:55

Re: bilder einlesen und unter neuem namen speichern
 
Welche? Zum Auslesen oder zum Umbenennen?

shirocko 9. Mär 2008 15:58

Re: bilder einlesen und unter neuem namen speichern
 
naja ich dachte mir das jetzt so:
1. ich lese die einzelnen zeilen der txt datei aus
2. schreibe den dateinamen jeweils nach einem bestimmten muster um und speicher die datei mit einer schleife jeweils z.b. im ordner c:\test

so jetzt die frage:
wie kann ich nacheinander die zeilen der txt datei auslesen und wie ist die funktion SaveToFile definiert.

DeddyH 9. Mär 2008 16:00

Re: bilder einlesen und unter neuem namen speichern
 
Schau mal in die Hilfe zu TStringList. Das Gegenstück zu SaveToFile heißt LoadFromFile.

Noobinator 9. Mär 2008 16:19

Re: bilder einlesen und unter neuem namen speichern
 
ich weiß nicht ob ich dich richtig verstehe, aber:

Delphi-Quellcode:
var i:integer;// Zählvariable
begin
if opendialog1.Execute then
  begin
    for i := 0 to opendialog1.Files.Count - 1 do// alle Dateien durchgehen
     begin
       renamefile(opendialog1.Files[i],{neuer Name});
     end;
  end;

shirocko 9. Mär 2008 16:36

Re: bilder einlesen und unter neuem namen speichern
 
okay also mal konkret:
ich habe eine ordner mit dateien nach dem muster: 2008_03080031.JPG
jetzt hab ich die ja schon in die lsite.txt gespeichert und will die liste jetzt wieder auslesen und per insert befehl den dateinamen folgendermaßen verändern:

aus: 2008_03080031.JPG
wird: 2008_03_08-0031.JPG

und dann speicher ich das bild unter dem neuen namen in einem bestimmten ordner ab.
er soll also die dateinamen der liste.txt nacheinander abarbeiten und also neue datei schreiben mit dem neuen namen.

DeddyH 9. Mär 2008 16:38

Re: bilder einlesen und unter neuem namen speichern
 
Da ist der Ansatz von Noobinator doch goldrichtig und die Textdatei sparst Du auch ein.

shirocko 9. Mär 2008 16:41

Re: bilder einlesen und unter neuem namen speichern
 
okay supi
also nehm ich jetzt mal den code
Delphi-Quellcode:
var i:integer;// Zählvariable
begin
if opendialog1.Execute then
  begin
    for i := 0 to opendialog1.Files.Count - 1 do// alle Dateien durchgehen
     begin
       renamefile(opendialog1.Files[i],{neuer Name});
     end;
  end;
so nun will ich ja wie beschrieben den dateinamen per insert verändern.
kann ich jetzt einfach eine abfolge von insert befehle anstelle von "{neuer Name}" setzen oder muss ich das irgendwie einer eigenen Prozedur übergeben?

DeddyH 9. Mär 2008 16:55

Re: bilder einlesen und unter neuem namen speichern
 
Du musst nur vor der Zeile RenameFile den Dateinamen halt an Deine Bedürfnisse anpassen.

shirocko 9. Mär 2008 17:45

Re: bilder einlesen und unter neuem namen speichern
 
hi danke an euch alle ihr ward mir eine super Hilfe. Dank euch funktioniert es nun. Herzlichen dank :bounce1: :bouncing4: :bounce2:

Wenns euch interessiert, so siehts jetzt aus.

Delphi-Quellcode:
procedure TForm1.B_renameClick(Sender: TObject);
var i:integer;// Zählvariable
    dateiname:string;
begin
if opendialog1.Execute then
  begin
    for i := 0 to opendialog1.Files.Count - 1 do// alle Dateien durchgehen
     begin
        dateiname:='';
        dateiname:=ExtractFileName(OpenDialog1.Files[i]);
        Insert('_',dateiname,8);
        Insert('-',dateiname,11);
        renamefile(OpenDialog1.Files[i],dateiname);
     end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz