Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Konzeptfr.: Dateinamen einlesen, ändern,dann zurückschreiben (https://www.delphipraxis.net/119268-konzeptfr-dateinamen-einlesen-aendern-dann-zurueckschreiben.html)

juergen 23. Aug 2008 12:04


Konzeptfr.: Dateinamen einlesen, ändern,dann zurückschreiben
 
Hallo zusammmen,

folgendes habe ich vor:
- ein Verzeichnis auswählen, aus diesem sollen dann alle Dateien nebst Pfadangabe (auch aus den Unterverzeichnissen) eingelesen werden
(im Moment lese ich das ganze in ein Memo)
- dann soll man die Bezeichnungen einzelner Dateien ändern können
- in einem "Rutsch" die Änderung der Dateinamen vornehmen....

Meine Idee bis hierhin:
- ich schreibe die Dateinamen zusätzlich in ein 2. Memo(?)
- in dem 2. Memo kann man die Änderungen vornehmen
- dann prüfen ich das Memo 2 gegen das Memo 1 und weiß, wo Änderungen vorgenommen wurden (über IndexOf() )
- wenn der String aus Memo2 <> Memo1 dann wird die entsprechende Datei umbenannt

So, nun meine Fragen hierzu:
1.) ist dieses Konzept generell machbar, bzw. was wären Alternativen
2.) ich muss verhindern, dass eine Memo.Line gelöscht wwerden kann, da mir die Memo.Line[x] ja als Referenz dient

Irgendwie "spüre" ich, dass ich da im Moment das falsche Konzept habe. :gruebel:

Für alternative Vorschläge wäre ich sehr dankbar.
Es würde mir auch viel helfen, wenn zu evtl. alternativ aufgezeigten Komponeten die dann benötigten Eigenschaften mit genannt werden.

grenzgaenger 23. Aug 2008 12:18

Re: Konzeptfr.: Dateinamen einlesen, ändern,dann zurückschre
 
wie wär es mit einer tObjectList?

diese fütterst mit einem objekt welches ungefähr so aussieht

Delphi-Quellcode:
type TFutter = class
  private
   ffilename_old: string;
   ffilename_new: string;
  public
   function CanSave: boolean;
   procedure Save;
  end;

function TFutter.cansave: boolean;
begin
  result := ffilename_old <> ffilename_new;
end;

procedure save;
begin
  if cansave then
  begin
   //hier umbenennen
   ffilename_old := ffilename_New;
  end;
end;
wenn du das dann anzeigen möchtest, kein problem, kannst ja hinter einen tStringgrid oder listbox ja ein objekt hängen, die verwaltung kannst ganz einfach über die objectlist vornehmen :-)

<HTH> GG

juergen 23. Aug 2008 22:28

Re: Konzeptfr.: Dateinamen einlesen, ändern,dann zurückschre
 
Hallo grenzgaenger,

vielen Dank für deinen Denkansatz. :thumb:
Ich muss mich nun erst mal in das Thema TObjectList einlesen.

sx2008 24. Aug 2008 01:46

Re: Konzeptfr.: Dateinamen einlesen, ändern,dann zurückschre
 
Die Klasse TStrings kann ja nicht nur Strings speichern, sondern zu jedem String noch ein Objekt.
Das bedeutet man kann Memo.Lines mit Zeilen bestücken, wobei mit jeder Zeile ein Objekt verknüpft ist.
Delphi-Quellcode:
TFileObjekt=class(TObject)
public
  FileName:string;  // Dateiname mit gesamtem Pfad
  procedure RenameFile(const newfilename:string);
  function GetFilenamePart:string; // Dateiname ohne Pfad
end;

...
var
  fo : TFileObjekt;
...
  fo := TFileObjekt.Create;
  fo.FileName := .......;
  Memo1.Lines.AddObject(fo.GetFilenamePart, fo); // statt Add() wird AddObject() verwendet
Man muss jetzt aber noch aufpassen: löscht der Benutzer eine Zeile, wird das Objekt nicht freigegeben!
=> es droht Speicherleck
Hier hilft aber die Klasse TObjectList.

juergen 24. Aug 2008 10:13

Re: Konzeptfr.: Dateinamen einlesen, ändern,dann zurückschre
 
Hallo sx2008,

danke für die Erläuterungen!
Gestern hatte ich angefangen mich mit TObjectList zu beschäftigen.
Nachdem ich die Ableitungen von TList bis hin zu TObjectList gelesen hatte war für mich auch klar, dass ich die TObjectList einsetzen werde, weil hier die Verwaltung viel komfortabler ist (z.B. auch dein beschriebenes Löschen).
Ich hatte auch gelesen, dass man die TObjectList an eine Klasse anpassen sollte (wegen Typensicherheit).
Im Prinzip genau das wie grenzgaenger es vorgeschlagen hat.

Das versuche ich gerade zu verstehen, habe da aber noch Probleme mit der Implementierung von eigenen Funktionen (nichtdeklarierter Bezeichner...)

Einen schönen Sonntag noch!


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