Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien kopieren und umbenennen (https://www.delphipraxis.net/164793-dateien-kopieren-und-umbenennen.html)

Lyan 30. Nov 2011 00:08

Delphi-Version: 2010

Dateien kopieren und umbenennen
 
Guten Tag Com,

hab hier z.Z. wieder Wissensmangel :P

Ich schidlere mal:

Ich habe eine Textdatei mit z.B. 10 Namen:

Code:
hallo
okay
datei3
delphi
.
.
.
.
Okay, nun kann der Benutzer eine Datei per opendialog auswählen.

Auf Buttonclick soll die Datei, die der Benutzer ausgewählt hat in diesem Fall 10 mal Kopiert und in einen Ordner namens (z.B. 'output') verschoben werden.

Die 10 .EXE-Dateien sollen nun jeweils einen Namen der Textdatei haben -> folglich:

Code:
okay.EXE
datei3.EXE
delphi.EXE
Ich weiß nicht so ganz wie ich das am einfachsten lösen soll. Eine Stub dafür zu machen wäre ja unnötig oder? Wenn ichs richtig verstanden habe überschreibt man mit ner Stub ja nur die ressourcen... naja wie auch immer.
Ich lasse meine Ideen zu dem Problem mal außenvor, da diese glaub nur zu verwirrung führen ;) ...


Vielen Dank

lbccaleb 30. Nov 2011 00:41

AW: Dateien kopieren und umbenennen
 
Nen "bisschen verwirrend" ist nur dein Vorhaben.
Kann irgendwie nicht den Sinn erkennen -.-

Vllt solltest du es nochmal genau beschreiben, was du machen möchtest...

p80286 30. Nov 2011 06:28

AW: Dateien kopieren und umbenennen
 
Wie wäre es, dies mit COPY zu erledigen?

Delphi-Quellcode:
COPY Datei1. output\Datei1.EXE
COPY Datei2. output\Datei2.EXE
...
COPY Datei10. output\Datei10.EXE


Gruß
K-H

Andreas L. 30. Nov 2011 08:13

AW: Dateien kopieren und umbenennen
 
Oder in Delphi:

Delphi-Quellcode:
sourcefile := 'C:\quelle\datei.exe';
outputdir := ExtractFilePath(ParamStr(0)) + 'output\';
// namen ist eine TStringList mit den Namen aus der Datei
for i := 0 to namen.count -1 do
  CopyFile(sourcefile, outputdir + namen[i] + '.exe');

Sir Rufo 30. Nov 2011 09:09

AW: Dateien kopieren und umbenennen
 
Oder auch mit der Unit aus dem Thread http://www.delphipraxis.net/158152-d...-datentyp.html
Delphi-Quellcode:
var
  Source, Target : _FileName;
  lName : string;
begin
  Source := 'C:\quelle\Datei.exe';
  Target := Source;
  Target.cd( 'output' ); // wechselt den Pfad => "C:\quelle\output\Datei.exe"
  if Target.ForcePath then // legt den Pfad "C:\quelle\output\" an
    for lName in namen do
      begin
        Target.FileNameWoExt := lName; // ersetzt nur den Namen nicht die Extension
        CopyFile( Source, Target );
      end;
end;

Lyan 30. Nov 2011 11:07

AW: Dateien kopieren und umbenennen
 
Habe mich an Andreas L. seine Variante gehalten, die auch soweit funktioniert bis auf paar kleinigkeiten.

Code:
procedure TFormSpreader.Button2Click(Sender: TObject);
var i: Integer;
    sourcefile, outputdir : String;
begin
  sourcefile := OpenDialog1.filename;
  CreateDir(ExtractFilePath(OpenDialog1.FileName) + 'output\');
  outputdir := ExtractFilePath(OpenDialog1.filename) + 'output\';
  // namen ist eine TStringList mit den Namen aus der Datei
  for i := 0 to memo1.Lines.count -1 do
  begin
    if (FileExists(outputdir + Memo1.Lines[i] + '.exe') OR FileExists(outputdir + Memo1.Lines[i])) then
    begin
      if MessageDlg('Eine oder mehrere Dateien wurden gefunden die bereits existieren! Möchten Sie diese überschreiben?', mtWarning,[mbYes,mbNo],0) = mrYes then
      CopyFile(PChar(sourcefile), PChar(outputdir + memo1.lines[i] + '.exe'), True);
    end
    else
      CopyFile(PChar(sourcefile), PChar(outputdir + memo1.lines[i] + '.exe'), false);
  end;
end;
So next Problem: ich möchte ja fragen ob die Dateien überschrieben werden sollen, wie könnte ich denn eine Abfrage machen, dass diese Aktion für alle Dateien angewendet wird. Also z.B. im Messagdlg noch YestoALL...

Aber wie spring ich dann aus den Abfragen weg?

Muss ich dann intern, also extra für das "YesTOALL" eine neue Schleife machen, die dann alles überschreibt, bzw. die Dateien die schon existieren nicht überschreibt?

Meine Idee wäre dann eben so:

Code:
case messagedlg('möchten sie ersetzen?', mtWarning, [mbYes,mbNo,mbYestoall,mbNotoall], 0) of

mbYes: ....

mbNo : ....

mbYesToAll : for i 0 to memo1.lines.count -1 do
             begin
               copyfile(pchar(source), pchar(output), TRUE)
             end;
usw.

aber vlt. hat jem. ja ne wesentlich schönere variante!

Danke im voraus

DeddyH 30. Nov 2011 12:20

AW: Dateien kopieren und umbenennen
 
Wie wäre es denn mit einer Boolean-Variablen?
Delphi-Quellcode:
//Erstmal nur neue Dateien
OnlyNew := true;
for i := 0 to Dateien.Count - 1 do
  //CopyFile schlug fehl
  if not CopyFile(PChar(sourcefile), PChar(destfile), OnlyNew) then
    //Datei bereits vorhanden
    if GetLastError = ERROR_ALREADY_EXISTS then
      //Dialog bestätigt
      if MessageDlg(...) = mrYes then
        //weitere werden überschrieben
        OnlyNew := false;
Ungetestet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz