![]() |
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. |
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:
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 :-)
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; <HTH> GG |
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. |
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:
Man muss jetzt aber noch aufpassen: löscht der Benutzer eine Zeile, wird das Objekt nicht freigegeben!
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 => es droht Speicherleck Hier hilft aber die Klasse TObjectList. |
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 10:40 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 by Thomas Breitkreuz