GetDevice from Filename .. [ gelöst ]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

GetDevice from Filename .. [ gelöst ]

Beitrag von corpsman »

Guten Morgen, ich bins schon wieder.

Wie man anhand meiner letzten Fragen evtl erraten kann, schreibe ich mir gerade ein Programm, welches Dateien auf der Festplatte hin und her kopieren kann.

Das besondere, bzw der Grund warum ich das mache, ist einfach.

Meine Anwendung besitzt eine "Warteschlange" in diese die Jobs eingeügt werden, und man kann nebenher weiterarbeiten.

Also wenn ihr z.b. sehr viele Files zur auswahl habt und nur vereinzelt welche Kopieren wollt ist dieses Feature einfach klasse, weil der Rechner dann ja im Hintergrund schon kopieren kann.

Das Kopieren, von Dateien, und Ordnern geht nun auch schon wunderbar, doch nun wollte ich auch noch das Verschieben machen. Das Problem hier ist.

Will man eine Datei von a nach b kopieren, und liegen a und b hierbei auf der selben Festplatte, dann reicht es ja wenn man nur ein "Rename" durchführt. Liegen a und b auf unterschiedlichen Festplatten, so mus man Kopieren und danach die ursprüngliche Datei löschen.

Da ich einen eigenen CopyFile diealog habe, der mir den Fortschritt und die überragungsgeschwindigkeit anzeigt, will ich diesen auch nutzen. Das Problem ist natürlich das ich ihn nur bei a und b auf unterschiedlichen Festplatten benutzen möchte, sonst eben den Rename Befehl.

Die Frage ist also wie Fülle ich :

Code: Alles auswählen

Function Tform2.SameDevice(v1, v2: String): Boolean;
Begin
  result := false;
 
End;

aus.

Kann mir da einer von euch hierbei helfen ?
Zuletzt geändert von corpsman am Di 22. Sep 2009, 07:13, insgesamt 1-mal geändert.
--
Just try it

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: GetDevice from Filename ..

Beitrag von monta »

Unter Windows sollte dir folgendes leicht weiterhelfen:
http://lazarus-ccr.sourceforge.net/docs ... drive.html

Code: Alles auswählen

result = (ExtractFileDrive(v1)=ExtractFileDrive(v2))

Unter Windows wohl kein Problem. Die Frage ist nur, wie man das (einfach) unter Linux ermittelt. Ich vermute mal, da nützt die Funktion nichts, müsstest du probieren.
Johannes

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: GetDevice from Filename ..

Beitrag von corpsman »

*g*

genau ich bin Linux User und das ist mein Problem ;).
--
Just try it

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: GetDevice from Filename ..

Beitrag von monta »

könntest ja mal deine Signatur-Betriebssystemangabe anpassen, dann muss man nicht immer raten ;)
Johannes

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: GetDevice from Filename ..

Beitrag von corpsman »

Sry, hatte ich übersehen.

Da ich aber sowieso meistens für beide Systeme eine Lösung suche, war die nichtangabe evtl auch nicht ganz so tragisch ;)
--
Just try it

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: GetDevice from Filename ..

Beitrag von Targion »

Hmm... Was geau willst du? Würde es nicht reichen, zu prüfen, ob die Dateien in den selben Ordnern liegen? Unter Linux werden Laufwerke (wenn sie gemounted wurden) sowieso wie eigene Ordner behandelt. Um zu prüfen, ob zwei Order unter Linux auf dem gleichen Laufwerk liegen, fiele mit jetzt auf die schnelle nur ein dreckiger Workaround ein... Vielleich hilft dir Dos ja schon...

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: GetDevice from Filename ..

Beitrag von creed steiger »

corpsman hat geschrieben:Will man eine Datei von a nach b kopieren, und liegen a und b hierbei auf der selben Festplatte, dann reicht es ja wenn man nur ein "Rename" durchführt.

Wenn du unter Linux eines der gängigen Filesysteme benutzt wird das meine Meinung nach unter der Haube sowieso schon so gemacht.

(evtl Flushen nicht vergessen wegen http://www.heise.de/newsticker/Moeglich ... ung/134346)

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: GetDevice from Filename ..

Beitrag von corpsman »

du hast mich glaubig falsch verstanden,

Du hast schon recht, wenn ich das Renamen per system call mache, geht das auch. Aber dann habe ich eben den Progress nicht. Weswegen ich es ja von Hand machen will...
--
Just try it

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: GetDevice from Filename ..

Beitrag von Targion »

Warum hast du den Progress dann nicht? FileCopy() lässt sich doch hervorragend verwenden, oder?

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: GetDevice from Filename ..

Beitrag von corpsman »

Also,

Es hat sich nun rausgestellt, das renamefile, die gewünschte Funktionalität selbst mit sich bringt.

D.h.

Wenn ich ein RenameFile auf unterschiedlichen Devices ausführe, schlägt es fehl, es funktioniert nur wenn, Quelle und Ziel auf der selben Festplatte liegen.

D.h. ich muste nun nur die Fehlerbehandlung von RenameFile abändern, und schon gings ;).

Trotzdem danke für eure mühen ..
--
Just try it

Antworten