Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   XCOPY mit Delphi nachbauen (https://www.delphipraxis.net/50745-xcopy-mit-delphi-nachbauen.html)

Hansa 2. Aug 2005 10:45

Re: XCOPY mit Delphi nachbauen
 
Natürlich ist das nicht fest. Ich lasse das aus ComboBoxen auswählen :

Delphi-Quellcode:
  ShellExecute (0,'open','Demoinst.bat',
                PChar (cboQuellLW.Text+' '+cboZielLW.Text),'',SW_NORMAL);
In der Ziel-Combo steht der Laufwerksbuchstabe und der freie Platz auf der Platte. Das reicht.

Allerdings will ich eine Protokolldatei haben, um anzuzeigen, was jetzt genau kopiert wurde und wohin. Ich bräuchte also die Aúsgabe von dem Shellexecute.

Das kopieren dauert mind. 30 Sek. Das ist massig Zeit für einen DAU das Ausgabefenster einfach so zu schließen. 8) Mit SW_HIDE wäre das zu umgehen, aber dann besteht die Gefahr, daß wegen anscheinendem "Rechner hängt" ein DAU sogar den Rechner abschaltet, weil er nichts sieht. 8)

MaBuSE 2. Aug 2005 10:50

Re: XCOPY mit Delphi nachbauen
 
Zitat:

Zitat von Hansa
...Allerdings will ich eine Protokolldatei haben, um anzuzeigen, was jetzt genau kopiert wurde und wohin. Ich bräuchte also die Aúsgabe von dem Shellexecute.

Das kopieren dauert mind. 30 Sek. Das ist massig Zeit für einen DAU das Ausgabefenster einfach so zu schließen. 8) Mit SW_HIDE wäre das zu umgehen, aber dann besteht die Gefahr, daß wegen anscheinendem "Rechner hängt" ein DAU sogar den Rechner abschaltet, weil er nichts sieht. 8)

Wenn Du die Kontrolle über die Kopieraktion behalten willst, darfst Du sie nicht mit ShellExecute aus der Hand geben.
Dann wirst Du wohl doch etwas Delphi programmieren müssen. ;-)
Die Funktionen zum Kopieren in Delphi wurden ja weiter oben schon angesprochen...

Hansa 2. Aug 2005 11:01

Re: XCOPY mit Delphi nachbauen
 
Du meinst mit Blockread usw. ? :gruebel: Der Rest sind ja auch nur WinApi Sachen.

MaBuSE 2. Aug 2005 11:06

Re: XCOPY mit Delphi nachbauen
 
Zitat:

Zitat von Hansa
Du meinst mit Blockread usw. ? :gruebel: Der Rest sind ja auch nur WinApi Sachen.

Wo ist das Problem?

Hast Du Angst vor der Win32 API ?

Delphi-Quellcode:
uses ShellAPI;

function MyCopy(Quelle, Ziel: string):Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY      // nur Dateien wenn Wildcard (*.*) verwendet werden
           or FOF_NOCONFIRMATION; // Keine Abfrage, es wird JA angenommen (z.B. überschreiben)
    pFrom := PChar(Quelle + #0);
    pTo   := PChar(Ziel)
  end;
  Result := (0 = ShFileOperation(fos));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//  if myCopy('C:\TEMP\*.*', 'C:\Verzeichnis) then caption := 'OK' else Caption := 'ERR';
// oder für jede Datei einzeln...

  if myCopy('C:\TEMP\EinzelneDatei.ext', 'C:\Verzeichnis') then caption := 'OK' else Caption := 'ERR';
end;

Hansa 3. Aug 2005 00:40

Re: XCOPY mit Delphi nachbauen
 
Angst ? Ne. Aber Mabuse, Dein Source ist mir zu WinApi lastig. :mrgreen: Außerdem hat mein Programm einen Denkfehler. Warum soll ich das Quelllaufwerk abfragen, wenn das Setup-Programm von einer CD gestartet wird ? :zwinker: Wie komme ich nun an dieses dran, also das aktuelle ?

Delphi-Quellcode:
procedure TForm1.ErmittleAlleLW;
var
  l: byte;
begin
  l := GetLogicalDriveStrings(SizeOf(LWs), LWs);
  QuellLW := LWs [0];
So gehts nicht. Der zeigt mir dann "A" an. Habe gedacht 0 wäre immer das aktuelle. 8)

Luckie 3. Aug 2005 01:00

Re: XCOPY mit Delphi nachbauen
 
Äh, du weißt aber dass du mit ParamsStr(0) Verzeichnis und Anwendungsnamen bekommst?

bigg 3. Aug 2005 01:06

Re: XCOPY mit Delphi nachbauen
 
moin hansa,

den programmpfad bekommst du doch über ParamStr(0);


*schnipp, Lösung wieder entfernt :P*

MaBuSE 3. Aug 2005 06:38

Re: XCOPY mit Delphi nachbauen
 
Zitat:

Zitat von Hansa
Angst ? Ne. Aber Mabuse, Dein Source ist mir zu WinApi lastig. :mrgreen:

Was heißt hier zu WinAPI lastig?

Wenn Du ein Form1.Show; programmiert macht Du ja im Grunde auch nur einen WinAPI Aufruf.
Deine Programme laufen unter Windows -> Windoes funktioniert nun halt mal "nur" mit WinAPI Aufrufen!
WEnn in Deinen Programmen keine WinAPI Aufrufe enthalten sein sollen, mußt Du unter Dos oder Linux oder MacOS programieren.

Zitat:

Zitat von Hansa
Außerdem hat mein Programm einen Denkfehler.

Für Denkfehler im Programm ist immer der Entwickler verantwortlich. :mrgreen:

Zitat:

Zitat von Hansa
Warum soll ich das Quelllaufwerk abfragen, wenn das Setup-Programm von einer CD gestartet wird ? :zwinker: Wie komme ich nun an dieses dran, also das aktuelle ?

Der Dateiname der Exe steht in Application.ExeName oder in wie schon erwähnt ParamStr(0).

An den Laufwerksbuchstaben kommst Du auch relativ leicht:
Delphi-Quellcode:
function ExtractFileDrive(const FileName: string): string;
Aber Vorsicht es gibt Leute (wie mich :-)) die auf ein CD-ROM Laufwerk auch direkt über den UNC Namen zugreifen, in dem Fall gibt es keinen Laufwerksbuchstaben des CD-ROMs.
z.B.: \\SERVER\CDROM\setup.exe -> ExtractFileDrive(Application.ExeName) = ''
Oder dem CD-ROM ist kein Laufwerksbuchstabe zugewiesen, aber das CD-ROM wurde in ein Verzeichnis gemountet.
z.B. C:\CDROM\setup.exe -> ExtractFileDrive(Application.ExeName) = 'C:'
C: ist aber nicht das CD-ROM Laufwerk, sondern die Festplatte (obwohl ja auf das CD-ROM zugegriffen wurde)
Oder der Kunde hat den Inhalt der CD ganz einfach in ein Verzeichnis auf der Festplatte kopiert.

Es ist also besser mit folgender Funktion den kompletten Pfad zu ermitteln und dann mit relativen Pfadangaben zu arbeiten.´
Delphi-Quellcode:
function ExtractFilePath(const FileName: string): string;
z.B.: Quelle ist das Quellverzeichnis der Daten:
Delphi-Quellcode:
Quelle := ExtractFilePath(Application.ExeName)+'..\Daten\';
Es kann dann z.B. so ein Pfad entstehen: 'E:\Install\..\Daten\' der aber funktioniert. (Ist das gleiche wie 'E:\Daten')

Ich hoffe diese Infos helfen Dir.

MaBuSE 3. Aug 2005 06:45

Re: XCOPY mit Delphi nachbauen
 
Zitat:

Zitat von bigg
*schnipp, Lösung wieder entfernt :P*

Eigentlich hast Du Recht ;-)
Es steht ja alles schon in der DP und es gibt ja die Such Funktion...

Aber jetzt wo ich das alles schon mal getippt habe, lasse ich es drin.

Hansa 3. Aug 2005 10:42

Re: XCOPY mit Delphi nachbauen
 
Ja, Paramstr (0) enthält ja auch den Laufwerksbuchstaben. 8) Wie bin ich nur darauf gekommen, da wäre nur der Pfad drin ? :gruebel:

Delphi-Quellcode:
  QuellLW := ExtractFileDrive(ParamStr (0));
  if QuellLW = '' then begin
    showmessage ('Kein CD-Laufwerk bzw. kein Laufwerksbuchstabe gefunden !'#10#13#10#13+
                 'Sollten Sie die CD mit einem gemappten Laufwerk benutzen, oder'#10#13+
                 'wollen Sie von Festplatte installieren, so lesen Sie sich bitte die Datei'#10#13+
                 'INSTALL.TXT auf der CD durch.');
    Close;
  end;
Das wäre die Mabuse-Version. Der müßte dann eben nachlesen, wo was hin muß. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.
Seite 3 von 4     123 4      

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-2025 by Thomas Breitkreuz