Entwickler-Ecke
Dateizugriff - Dateien verschieben
$ebbi - Do 28.07.11 12:50
Titel: Dateien verschieben
Hi,
ich möchte gerne ein Delphi Programm schreiben, welches Dateien aus Ordner A ausschneidet und in Ordner B kopiert, allerdings hab ich keine Ahnung wie ich das machen könnte. Gibts für sowas Befehle oder andere Möglichkeiten?
Zusätzlich soll die aktuellste Datei (letztes Änderungsdatum) aus Ordner A nicht ausgeschnitten werden sondern in Ordner A bleiben.
Wäre schon wenn mir jemand sagen könnte wie man soetwas machen kann.
mfg $ebbi
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Do 28.07.2011 um 13:03
Moderiert von
Martok: Titel geändert, war: "Strg+X; Strg + V"
Narses - Do 28.07.11 13:04
Moin!
Mal ein paar Suchbegriffe:
FINDFIRST
MOVEFILE :idea: :les: :zustimm:
cu
Narses
$ebbi - Do 28.07.11 15:07
eine bestimmte datei verschieben klappt jetzt. Jetzt muss ichs noch hinbekommen, dass ich mehrere verschiebe (ohne den Namen zu kennen), und die erste nicht zu verschieben. Wäre schön wenn mir da jemand nochma helfen könnte.
Findfirst hab ich nix passendes gefunden, movefile funktioniert tadellos, dafür schonmal vielen dank.
Narses - Do 28.07.11 15:18
Moin!
$ebbi hat folgendes geschrieben : |
Findfirst hab ich nix passendes gefunden, |
Sorry, aber das kann ich mir nicht vorstellen :suspect: :les: Es sei denn, du meinst, dass du keinen c&p-fähigen Code findest... :mrgreen:
dafür sind wir auch nicht zuständig...
cu
Narses
Delete - Do 28.07.11 18:33
1. Ein schlechterer Titel für deinen Beitrag ist dir nicht eingefallen? Warum schreibst du nicht, was du machen willst: "Dateien verschieben"
2. Hättest du damit schon einen sehr erfolgversprechenden Suchbegriff.
3. Wärst du dann bestimmt auf MoveFile und SHFileOperation gestoßen.
4. Du willst uns sagen, dass du zu FindFirst(File) hier im Forum keine brauchbaren Suchergebnisse gefunden hast? Könnte daran liegen, dass du nicht gesucht hast.
$ebbi - Do 28.07.11 20:17
Luckie hat folgendes geschrieben : |
1. Ein schlechterer Titel für deinen Beitrag ist dir nicht eingefallen? Warum schreibst du nicht, was du machen willst: "Dateien verschieben"
|
auschneiden+einfügen ist im Prinzip das gleiche wie verschieben, sollte ich dich damit überfordert haben tut es mir leid ;)
Luckie hat folgendes geschrieben : |
3. Wärst du dann bestimmt auf MoveFile und SHFileOperation gestoßen.
|
bin ich ja dann auch dank der netten Hilfe von Narses, der im Gegensatz zu dir, freundlich, darauf hingewissen hat.
Luckie hat folgendes geschrieben : |
4. Du willst uns sagen, dass du zu FindFirst(File) hier im Forum keine brauchbaren Suchergebnisse gefunden hast? Könnte daran liegen, dass du nicht gesucht hast.
|
ja genau das möchte ich dir sagen vllt liegt das auch daran dass ich nicht alles versteh, weil meine Kenntnisse eben sehr beschränkt sind.
Dank dir gesellen sich zu der Beschreibung von Informatikern, neben übergewichtig und humorlos nun auch noch unfreundlich, aber gibt ja zum Glück auch ausnahmen (z.b. narses zumindest isser nett ;))
Narses - Fr 29.07.11 00:37
Moin!
$ebbi hat folgendes geschrieben : |
vllt liegt das auch daran dass ich nicht alles versteh, weil meine Kenntnisse eben sehr beschränkt sind. |
Welchen Code hast du dir denn angesehen? Hast du ihn ausprobiert? Was genau verstehst du nicht? :nixweiss:
Was Luckie vermutlich sagen wollte ist: das sind Basics, da wird dir keiner den Code so schreiben, wie du ihn haben willst (und das zu recht). Das solltest du selbst auf die Kette bekommen. Wenn´s hakt: konkrete Fragen stellen. :idea:
cu
Narses
Delete - Fr 29.07.11 00:48
Mit Strg+X, Strg+V verbinde ich eher Textoperationen in einem Textverarbeitungssystem. Aber was ist daran so schwer sich klar auszudrücken? Ist das zu viel verlangt, wen man am Beitragstitel gleich erkennen kann, um was es geht? Und ich würde sagen, dass ich nicht unhöflich war, nur einfach direkt.
Zu deinem Problem dürftest du im Forum übrigens fast fertigen Code finden. Es müsste nur etwas für deinen speziellen Anspruch modifiziert werden. Und wenn wir deinen speziellen Anspruch mal außer Acht lassen, dürftest du schon fertigen Code hier finden.
Delphi-Laie - Fr 29.07.11 11:24
Luckie hat folgendes geschrieben : |
Mit Strg+X, Strg+V verbinde ich eher Textoperationen in einem Textverarbeitungssystem. |
Diese Befehle beziehen sich keinesfalls nur auf einzelne Zeichen(ketten) (und sind damit keinesfalls auf Editoren und komplexere Textprogramme beschränkt), sondern sind auch bei Daten anderer Art (z.B. Teile eines Bildes) und auch auf Dateien und sogar Verzeichnisse anwendbar. Und mit beiden Befehlen hintereinander in dieser Reihenfolge kann man sehr wohl verschieben. Insofern war der Beitragstitel eher unpräzis (weil unvollständig) als falsch.
Luckie hat folgendes geschrieben : |
Aber was ist daran so schwer sich klar auszudrücken? Ist das zu viel verlangt, wen man am Beitragstitel gleich erkennen kann, um was es geht? |
Zur Ehrenrettung des Diskussionseröffners sei gesagt: Der klare Ausdruck (bzw. die klare Ausdrucksweise) setzt voraus, in einer Materie voll drinzustecken, besser noch, darüberzustehen. Diesen Vorteil hat man anfangs nicht.
Delete - Fr 29.07.11 13:02
Ja, ich weiß. Benutze ich ja selber oft so im Explorer. Nichts desto trotz verbinde ich es eher mit dem Ausschneiden und Einfügen von Zeichen in einem Editor oder Textverarbeitungssystem. Aber egal.
$ebbi - Fr 29.07.11 13:08
Gut dann versuch ich mal konkretter zu werden :)
movefile klappt soweit, problem ist, dass ich damit nur eine Datei verschieben kann und ich deren genauen Namen kennen muss, gibts da andere Möglichkeiten? Mein Problem ist eben dass einfach alle Dateien verschoben werden sollen ohne deren genauen Namen zu kennen.
mit findfirst werd ich mich nochma genauer auseinandersetzen ma sehen vllt klappt das ja.
Ach ja kann ich eigneltich den Pfad zu einer Datei aus einem edit auslesen?
Habs mal ganz klassisch probiert also movefile('pfada','pfadb'); wobei pfada und b eben die strings aus dem edit sind.
klappt aber nicht im gegensatz zu movefile('C:\DateiA','C:\DateiB') gibts ne möglichkeit den pfad ins edit zun schreiben?
Delete - Fr 29.07.11 15:18
Mit FindFisrt bekommst du doch alle Dateien im Order. Und dann eben für jede Datei MoveFile aufrufen. Da du aber die jüngste Datei nicht verschieben willst, würde ich alle Dateien in einer (String)Liste sammeln und die jüngste Datei rausschmeißen. Dann für jede Datei in der Liste MoveFile aufrufen.
$ebbi - Fr 29.07.11 16:28
habs jetzt fast geschafft. alles wird in ein memo gschrieben und muss jetzt nur noch verschoben werden. allerdings scheint movefile mit der string variable (verz1+2) nicht zurechtzukommen. wenn ich mir verz anzeigen lasse steht der exakt richtige dateipfad da. wenn ich manuell genau den ausgegebenen pfad einfüge klappts auch, mit der variable jedoch nicht. woran liegt den dass?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for j:=0 to memo1.Lines.Count do begin verz1:=edit1.text+memo1.lines[j]; verz2:=edit2.Text+memo1.lines[j]; movefile('verz1','verz2'); end; |
mfg $ebbi
Gausi - Fr 29.07.11 16:39
Das ist ein ganz dicker Anfängerfehler, würde ich sagen. :zwinker: Du möchtest hier die Datei "verz1" nach "verz2" verschieben. Das sind aber keine gültigen Dateinamen - oder siehst du da am Anfang sowas wie "c:\" ? ;-)
So muss es richtig heißen:
Delphi-Quelltext
1:
| movefile(verz1, verz2); |
Also ohne die ' '. Dann sind das da die Variablen. Mit den ' ' sind das einfach Strings mit dem Inhalt "verz1" bzw. "verz2".
$ebbi - Fr 29.07.11 16:51
Ohne '' bekomme die Fehlermeldung: Inkompatible Typen 'string' und 'Pwidechar'
komischerweise funktioniert dagegen deletefile(verz1) problemlos.
Delphi-Laie - Fr 29.07.11 21:56
Luckie hat folgendes geschrieben : |
Mit FindFisrt bekommst du doch alle Dateien im Order. |
Mit Findfirst findet man doch nur einen Eintrag, und zwar, soviel mir davon bekannt ist, immer denselben. Rekursiv (oder eher mit einem impliziten sog. callback?!) geht es dann mit Findnext weiter, bis auch das sich irgendwann erschöpft. Alternativ kann man auch die erste - logischerweise mit Findfirst - gefundene Datei verschieben, und beim nächsten Aufruf von Findfirst muß logischerweise eine andere Datei (als erster Eintrag) gefunden werden.
Delete - Fr 29.07.11 22:05
Wie der Threadersteller davon ausgegangen ist, dass man mit Strg+X und Strg+V gleich weiß, dass es um das Verschieben von Dateien geht, bin ich davon ausgegangen, dass wenn von FindFirst(File) die rede ist, man auch weiß, dass man mit FindNext(File) und einer entsprechenden Schleife alle Dateien in einem Ordner (und eventuell noch Unterordnern) finden kann.
$ebbi - Sa 30.07.11 17:37
Programm ist fertig :)
hier lag der Hund begraben eientlich ziemlich logsich, komisch aber dass ich das bei deletefile nicht gebrauht hab :?:
Delphi-Quelltext
1:
| movefile(pchar(verz1),pchar(verz2)); |
jaenicke - Sa 30.07.11 18:22
$ebbi hat folgendes geschrieben : |
hier lag der Hund begraben eientlich ziemlich logsich, komisch aber dass ich das bei deletefile nicht gebrauht hab :?: |
Wieso ist das komisch? Die Parameter sind schließlich auch andere...
Delphi-Quelltext
1: 2:
| function DeleteFile(const FileName: string): Boolean; function MoveFile(lpExistingFileName, lpNewFileName: PWideChar): BOOL; stdcall; |
Das DeleteFile, das du benutzt hast, ist nicht umsonst in der Unit SysUtils definiert. Dort wird dann die API Funktion Windows.DeleteFile aufgerufen, die wiederum auch einen PWideChar erwartet. Diese Funktion ist genauso wie MoveFile in der Unit Windows deklariert, da es eine direkte API Funktion ist.
Dass die Typen der Parameter unterschiedlich sind, zeigt dir Delphi doch aber eigentlich auch an, wenn du die Klammer hinter den Befehl setzt oder Strg + Shift + Leer drückst...
Delphi-Laie - Sa 30.07.11 18:26
Das liegt vielleicht an der unterschiedlichen Kapselung der (eigentlich) Windows-Funktionen durch Delphi.
Welchen Datentypes die Funktionen bedürfen, ist auch schon mithilfe der Programmierhilfe ("Code insight") ermittelbar, dazu muß man nicht unbedingt ein Forum fragen.
Edit: jaenicke war schneller und antwortete im Prinzip das gleiche, jedoch mal wieder ausführlicher und fundierter....
Martok - Sa 30.07.11 20:19
:lol:
Ich war mal so frei, den Titel zu ändern.
$ebbi wollte ja anscheinend nicht :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!