| Autor |
Beitrag |
pwsolaris
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Mi 13.07.11 13:18
Hallo,
ich habe mal wieder eine eher einfache Frage.
Ich möchte ein BackUp Programm für mich privat schreiben, welches mit dem Befehl "xcopy" arbeitet.
Bisher habe ich das immer über eine BAT Datei gelöst.
In meinem Programm möchte ich nur das Quell- und Ziellaufwerk auswählen und dann mit einem Button alle Dateien der Quelle auf das Ziellaufwerk sichern.
Zudem möchte ich den Sicherungsprozess mitloggen.
Wenn ich xcopy über die Eingabeaufforderung starte, sehe ich ja auch immer welche Datei er momentan kopiert usw. Diese Ausgabe möchte ich in meinem Programm in einem Memo-Feld verwirklichen und zudem auch in einer Text-Datei speichern.
Wie ich den Befehl xcopy aufrufe ist mit bekannt. Mir geht es hier vielmehr um das Anzeigen des xcopy- Status.
Kann mir einer von euch sagen, wie ich die Ausgabe über meine Programmoberfläche am besten umsetzen kann?
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 13.07.11 14:03
Shellexecute und und Datei umleiten per >>
oder etwas in der Art: ConsoleThread ist im Anhang
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| implementation uses ConsoleThread;
var cs:TConsoleThread;
Procedure TheCallBack(s:AnsiString); var ansi:WideString; begin Setlength(ansi,length(s)); OemToChar (@s[1],@ansi[1]); ansi := StringReplace(StringReplace(ansi,#9689,#10,[rfReplaceAll]),#9834,#13,[rfReplaceAll]); Form1.Memo1.Text:=Form1.Memo1.Text+ansi; Form1.Memo1.Perform(EM_LineScroll, 0 , Form1.Memo1.Lines.Count-1);
end;
procedure TForm1.Button7Click(Sender: TObject); begin cs := TConsoleThread.Create('cmd /C xcopy C:\temp\*.txt C:\temp\kill /Y'#13#10, '','',TheCallBack); cs.Resume; end; |
Einloggen, um Attachments anzusehen!
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Mi 13.07.11 14:40
ganz simple variante
Delphi-Quelltext
erweitern zu
Delphi-Quelltext 1:
| xcopy C:\temp\*.txt c:\Zielordner /y > DeinLogDateiName.txt |
Dann im Prog einfach die Datei 'DeinLogDateiName.txt' in ein Memo einlesen
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mi 13.07.11 15:01
Noch simpler: suche mal nach TDosCommand.
EDIT: wobei ich grade sehe, TConsoleThread ist schon da. Das reicht dann ja 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 14.07.11 06:38
XCOPY ?
Das halte ich für keine gute Idee.
XCOPY ist uralt und hat nur eingeschränkte Möglichkeiten.
Guckst Du hier (Source+EXE):
delphi.about.com/lib...weekly/aa033004a.htm
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Do 14.07.11 09:42
Spricht doch nix dagegen, das zu nutzen wenn es alles kann was der OP will.
Gut, ich verwende in meiner Sync-Lösung auch Robocopy (mit Wrapper-Skripten), aber das halt weil ich /MIR gebraucht hab 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 14.07.11 10:07
hathor hat folgendes geschrieben : | | XCOPY ist uralt und hat nur eingeschränkte Möglichkeiten. |
Was hat das alter eines Programms mit seiner Funktionalität zu tun? Es wird noch immer von Microsoft zu seinen Betriebssystemen ausgeliefert. Warum soll man es also nicht nutzen? Und wenn es das tut, was verlangt wird, warum dann ein anderes nutzen? Oder würdest du mir auch empfehlen Photoshop für mehrere tausend Euro zu kaufen nur, um Bilder etwas nachzuschärfen und rote Augen zu korrigieren?
Aber was ganz anderes? Warum wird da jetzt ein Delphi Programm drumherum gebastelt? Wenn ich schon ein Delphi Programm dafür schreibe, dann kann ich doch auch gleich die passenden API Funktionen nutzen. Wenn ich doch nur wieder ein Konsolenprogramm aufrufe, kann ich doch auch bei dem Batchscript bleiben.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 14.07.11 10:10
Ich finde, für ein Anfängerprojekt ist ein Wrapper für eine Konsolenanwendung durchaus ein schönes Projekt. Und wenn dann auch noch was einigermaßen nützliches rauskommt - um so besser.
Ich hab auch mal vor 15 Jahren damit angefangen, einen Wrapper für ein MP3-Konvertierungstool in VB zu programmieren. Also, why not?
Dass man es als etwas erfahrener Programmierer vielleicht anders machen würde steht auf einem anderen Blatt.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: Martok
|
|
|