Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Shellexecute Problem mit Copy (https://www.delphipraxis.net/163391-shellexecute-problem-mit-copy.html)

Jamah 27. Sep 2011 12:46

Shellexecute Problem mit Copy
 
Hi.
Also ich wollte 2 Dateien zusammen kopieren. Das hat auch per Konsole mit 'Copy /b' ganz gut geklappt.
Problem ist jetzt folgendes.
Diese Zeile ist dafür verantwortlich, dass das passiert:
Delphi-Quellcode:
if ShellExecute(Handle, 'open', 'cmd.exe', pWideChar('/C copy /b 1.txt + 2.txt '+SaveDialog1.FileName), pWideChar(Dir), sw_hide) >= 32 then
      ShowMessage(SysErrorMessage(GetLastError));
Und nun wirds vollkommen bescheuert:
Wenn ich das ganze im Debugger mache funktionierts manchmal (!). Wenn ich das aber ausserhalb der IDE aufrufe bekomme ich Code 42 zurück, unter GetLastError allerdings ein 'Der Vorgang wurde Erfolgreich ausgeführt'.
Was aber praktisch passiert ist, dass ich nur 1.txt an die stelle kopiert bekomme. (Und wirklich nur 1.txt, größe und MD5 bestätigen, dass es nur die eine datei ist).

Woran könnte das liegen?

himitsu 27. Sep 2011 12:53

AW: Shellexecute Problem mit Copy
 
Relative Pfade sind böse.

Nutze absolute Pfade und es geht.


Und warum nicht einfach 2 bis 3 FileStreams, anstatt über diesen uralten DOS-Befehl?


PS: ShellExecute und PWideChar ist auch böse :warn:

ShellExecute + PChar + String
ShellExecuteA + PAnsiChar + AnsiString
oder
ShellExecuteW + PWideChar + WideString/UnicodeString

Luckie 27. Sep 2011 13:04

AW: Shellexecute Problem mit Copy
 
Warum ist Copy ein uralt Befehl? Er gehört immer noch zur Konsole, wie damals zu DOS. Aber auch ich würde FileStreams nutzen oder eine Batch-Datei. Aber das in einem Delphi Programm mit Shellexecute und Copy umsetzen zu wollen ist unsinnig.

Jamah 27. Sep 2011 13:06

AW: Shellexecute Problem mit Copy
 
Ahhh. Dummes Jamah.
Hätte man drauf kommen können...

Aber auch mit absoluten pfaden funktionierts nicht.

Plan B.
Also Datei in nen Stream krieg ich noch hin. Wie krieg ich 2 Streams hintereinander, also in einen?

Danke erstmal für eure Hilfe.

DeddyH 27. Sep 2011 13:08

AW: Shellexecute Problem mit Copy
 
Schau Dir einmal Delphi-Referenz durchsuchenTStream.CopyFrom an.

Jamah 27. Sep 2011 13:31

AW: Shellexecute Problem mit Copy
 
Irgendwie versteh ichs nicht ganz.
Hab beide Files jetzt in nem Stream aber irgendwie krieg ich die nicht in einen.
Abgesehen davon versteh ich aber auch diese Seite nicht ganz.

Könnte das jemand genauer erklären oder ein Beispiel posten?
Danke

DeddyH 27. Sep 2011 13:38

AW: Shellexecute Problem mit Copy
 
Versuch es mal so (ungetestet):
Delphi-Quellcode:
procedure Glue(const Files: TStrings;const DestFileName: string);
var i: Integer;
    src, dest: TFileStream;
begin
  try
    dest := TFileStream.Create(DestFileName,fmCreate or fmOpenWrite or fmShareExclusive);
    try
      for i := 0 to Files.Count - 1 do
        begin
          src := TFileStream.Create(Files[i],fmOpenRead or fmShareDenyNone);
          try
            dest.CopyFrom(src,0);
          finally
            src.Free;
          end;
        end;
    finally
      dest.Free;
    end;
  except
    on E: Exception do
      MessageBox(0,PChar(E.Message),nil,MB_OK or MB_ICONERROR);
  end;
end;
In Files sind die Dateien zu übergeben, die Du "zusammenkleben" willst, und DestFileName bezeichnet den Namen der Zieldatei.

Jamah 27. Sep 2011 14:03

AW: Shellexecute Problem mit Copy
 
Danke.
Funktioniert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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-2025 by Thomas Breitkreuz