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/)
-   -   Datei 1 mit Datei 2 ersetzen (https://www.delphipraxis.net/123274-datei-1-mit-datei-2-ersetzen.html)

Gonzo85 29. Okt 2008 22:12


Datei 1 mit Datei 2 ersetzen
 
Hallo liebe Leute brauche Hilfe bei folgendem:

Ich Programmiere seit kurzem mit Delphi.

Ich habe mir eine Form erstellt mit 4 Buttons (Abrechen[funzt],2x Durchsuchen[sich öffnet ein Opendialg],OK[deswegen schrieb ich hier^^])

Wenn ich den OK Button klicke soll folgendes passieren:

Die ausgewählte Datei Nummer eins (Dursuchen Button 1)
soll ersetzt werden von Datei nummer 2 (durch Durchsuchen Button 2 ausgewählt)

Nun weiß ich leider nicht wie...

Bitte helft mir.

MFG
Gonzo85

PS: Programmiere mit Delphi 7

Die Muhkuh 29. Okt 2008 22:13

Re: OpenDialg1 und OpenDialog2
 
Hi,

ersetzen meinst Du einfach die Datei 1 über die Datei 2 kopieren?

Gonzo85 29. Okt 2008 22:16

Re: OpenDialg1 und OpenDialog2
 
Ja richtig..

Mit Dem Opendialog 1 auf dem 1. Dursuchen Button wähle ich eine Datei aus die von der OpenDialog 2 der 2. Dursuchen Taste Datei ersetzt werden soll.

Quasi

Datei 1 ersetzt Datei 2. Und das mit OpenDialogs(oder so ähnlich wenn möglich)

mfg

BullsEye 29. Okt 2008 22:16

Re: OpenDialg1 und OpenDialog2
 
Vllt solltest du uns genauer sagen, was für eine Datei das ist ;)

Willkommen in der DP :dp:

EDIT: ggf SaveDialog?

Die Muhkuh 29. Okt 2008 22:19

Re: OpenDialg1 und OpenDialog2
 
Hi,

das sollte mit CopyFile oder MoveFile funktionieren. Je nach Belieben. Das MSDN bzw. die Onlinehilfe sagt Dir mehr darüber.

Gonzo85 29. Okt 2008 22:20

Re: OpenDialg1 und OpenDialog2
 
Es handelt sich um Sounddateien. Genauer gesagt *:wav dateien.

Es soll eine Art Soundchanger sein.

Man wählt Sound 1 aus und der wird durch Sound 2 ersetzt.

Bei SaveDialog Öffnet sich ja noch ein fenster mit "Speichern"

möchte aber Datei 1 auswählen dann Datei 2 auswählen dann OK klickne und dann wird datei 1 durch datei 2 ersetzt^^

mfg


Zitat:

Hi,

das sollte mit CopyFile oder MoveFile funktionieren. Je nach Belieben. Das MSDN bzw. die Onlinehilfe sagt Dir mehr darüber.
Ne genauere Beschreibung wäre cool ;) bin noch Anfänger.

Die Muhkuh 29. Okt 2008 22:23

Re: OpenDialg1 und OpenDialog2
 
Zitat:

Zitat von Gonzo85
möchte aber Datei 1 auswählen dann Datei 2 auswählen dann OK klickne und dann wird datei 1 durch datei 2 ersetzt^^
mfg

Siehe meinen Post über dem hier ;)

BullsEye 29. Okt 2008 22:25

Re: OpenDialg1 und OpenDialog2
 
hm, du musst ja irgendwie die Dateien irgendwo reinladen, und dann ersetzten, wo lädst du die denn rein?
oder wählst du nur mit dem OpenDialog aus?

Gonzo85 29. Okt 2008 22:26

Re: OpenDialg1 und OpenDialog2
 
Zitat:

Zitat von BullsEye
hm, du musst ja irgendwie die Dateien irgendwo reinladen, und dann ersetzten, wo lädst du die denn rein?
oder wählst du nur mit dem OpenDialog aus?

Bisher nur mit OpenDialog

Die Muhkuh 29. Okt 2008 22:27

Re: OpenDialg1 und OpenDialog2
 
Warum denn so umständlich? Datei 1 und 2 mit OpenDialog auswählen und mit CopyFile oder MoveFile operieren. Oder überseh ich gerade was? :gruebel:

Hobby-Programmierer 29. Okt 2008 23:20

Re: OpenDialg1 und OpenDialog2
 
... vielleicht noch prüfen ob es sich um das gleiche Verzeichnis handelt - dann nur Dateinamen von Datei 2 ändern und Datei 1 löschen. Sonst wie Muhkuh bereits vorgeschlagen hat.

Gonzo85 30. Okt 2008 13:01

Re: OpenDialg1 und OpenDialog2
 
Zitat:

Ne genauere Beschreibung wäre cool ;) bin noch Anfänger.

Gonzo85 30. Okt 2008 13:08

Re: OpenDialg1 und OpenDialog2
 
Code is bisher Ziemlich Simple und sieht so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
Opendialog1.Execute;
edit1.Text:=OpenDialog1.FileName;
end;

procedure TForm1.Edit1Change(Sender: TObject);
Var a:string;
begin

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
OpenDialog2.Execute;
edit2.Text:=OpenDialog2.FileName;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

end;

end.
Was muss ich für CopyFile und sowas machen? Iwie muss es ja umbenannt werden und dann die alte Datei ersetzen.

mfg

SirThornberry 30. Okt 2008 13:08

Re: OpenDialg1 und OpenDialog2
 
Kannst du deinem Beitrag bitte einen aussagekräftigen Titel geben? Danke :-D
Auch ist es nicht gern gesehen wenn du innerhalb von 24 Stunden pushst. Als Pushen bezeichnet man, wenn jemand einen Beitrag durch einen neue Antwort nach oben bringt. Nutze zukünftig innerhalb so kurzer Zeit wenn noch kein anderer zwischenzeitlich etwas gepostet hat die Edit-Funktion.

DeddyH 30. Okt 2008 13:18

Re: Datei 1 mit Datei 2 ersetzen
 
1. Bitte gewöhne Dir eine durchschaubare Einrückung an, das macht den Code leichter lesbar.
2. Die Execute-Methode eines Dialogs ist eine Funktion, also sollte man den Rückgabewert auswerten.
3. Versuch mal, diese Funktion einzubinden (ohne Gewähr, da aus dem Kopf getippt):
Delphi-Quellcode:
function Umbenennen(const OldName, NewName: string): Boolean;
begin
  Result := MoveFileEx(PAnsiChar(OldName),PAnsiChar(NewName),MOVEFILE_REPLACE_EXISTING);
end;

Gonzo85 30. Okt 2008 21:08

Re: Datei 1 mit Datei 2 ersetzen
 
Iwie weiß ich net wie cih den jetzt genau ändern muss damit das ergebnis da sich haben will daraus kommt ?

mfg

Hobby-Programmierer 30. Okt 2008 21:52

Re: Datei 1 mit Datei 2 ersetzen
 
sollte so funktionieren (Freestyle ohne Delphi)
Delphi-Quellcode:
const alteDatei = 'c:\alterName.txt';
      neueDatei = 'c:\neuerName.txt';
begin
  if Umbenennen(alterName, neuerName) then
    ShowMessage('erfolgreich');
end;
obwohl ich den Funktionsnamen eher unpassend und irreführend finde.

DeddyH 31. Okt 2008 09:41

Re: Datei 1 mit Datei 2 ersetzen
 
Der Funktionsname lässt sich ja anpassen, seid doch nicht so unflexibel :?

Hobby-Programmierer 31. Okt 2008 16:18

Re: Datei 1 mit Datei 2 ersetzen
 
Jap, hast ja recht! :cheers:
Meine Delphi-Hilfe kennt leider kein
Delphi-Quellcode:
MoveFileEx
:gruebel:
Deshalb habe ich kurz ein paar Fragen:
- ist ein verschieben über Laufwerke hinweg möglich?
- werden die Datei und Sicherheitsattribute übernommen?

LG Mario

DeddyH 31. Okt 2008 16:22

Re: Datei 1 mit Datei 2 ersetzen
 
In meiner Delphi 7-Hilfe steht die Funktion aber drin (OK, ist eine API-Funktion). Aber bitteschön: MSDN-Library durchsuchenMoveFileEx
Ob die Attribute dabei übernommen werden, kann ich da auch nicht herauslesen, das muss man halt ausprobieren.

Hobby-Programmierer 31. Okt 2008 16:35

Re: Datei 1 mit Datei 2 ersetzen
 
Danke für den Link! Ich muss dann wohl selber lesen wenn du dat nicht für mich testest :mrgreen:
Mir ist gerade aufgefallen das alle '....Ex' Funktionen in meiner Hilfe fehlen :roll:

LG Mario

QuickAndDirty 31. Okt 2008 16:42

Re: Datei 1 mit Datei 2 ersetzen
 
Im Menü:
Hilfe-> Windows SDK
Dort auf das Register "INDEX"
und dann eintippen was du suchst.

Wenn du das nicht findest, ich hätte hier Netviewer,
dann könnte ich dich fernwarten und es für dich demonstrieren.^^

Hobby-Programmierer 31. Okt 2008 16:50

Re: Datei 1 mit Datei 2 ersetzen
 
:wall: Klaro, ich Depp hatte in der Delphi-Hilfe statt im SDK gesucht.
Danke

DP-Maintenance 1. Nov 2008 10:35

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Delphi-Frage

Gonzo85 1. Nov 2008 11:49

Re: Datei 1 mit Datei 2 ersetzen
 
Komm leider nicht weiter ...

Ich weiß nicht wie ich noch was an deinem Code ändern muss damit er Datei 2 in einen Zwischenspeicher setzt ihn zu Dtei 1 bennent und ihn dann ersetzt.

mfg

DeddyH 1. Nov 2008 11:51

Re: Datei 1 mit Datei 2 ersetzen
 
Wir haben Dir doch schon alles vorgekaut. Wo hapert es denn nun noch?

Gonzo85 1. Nov 2008 12:30

Re: Datei 1 mit Datei 2 ersetzen
 
Das erste worans hapert ist das Delphi sich über den begriff "const" beschwert..

Das zweite ist ich versuchs immer wie ich denke mit den Vorausgetellten Codes, jedoch kriege ich des einfach nicht fertig.

Wenn einer von euch Zeit und Lust hätte könnte er mir es mit Teamviewer per Fernwartung Demonstireren sowas wäre echt klasse.

mfg

Hobby-Programmierer 1. Nov 2008 13:52

Re: Datei 1 mit Datei 2 ersetzen
 
Tach ...,
ok - dann ändere die Konstanten in Variablen um.
Zitat:

Zitat von Hobby-Programmierer
Delphi-Quellcode:
const alteDatei = 'c:\alterName.txt';
      neueDatei = 'c:\neuerName.txt';
begin
  if Umbenennen(alterName, neuerName) then
    ShowMessage('erfolgreich');
end;

ändern wir einfach in
Delphi-Quellcode:
var alteDatei, neueDatei: TFileName;
begin
  alteDatei:= 'c:\alterName.txt';
  neueDatei:= 'c:\neuerName.txt'
  if Umbenennen(alteDatei, neueDatei) then
    ShowMessage('erfolgreich');
end;
Natürlich nicht vergessen Detlefs Funktion anzupassen!
Delphi-Quellcode:
function Umbenennen(OldName, NewName: string): Boolean;
Anmerkung: Diese Funktion funktioniert nur innerhalb eines LW (Adminrechte vorausgesetzt). Solltest du nicht als Admin arbeiten nimm einfach ein anderes Test-LW

Macci 1. Nov 2008 15:11

Re: Datei 1 mit Datei 2 ersetzen
 
Hi Gonzo85,

ersetze in deinem Code einfach das hier:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin

end;
durch dieses hier:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
if not CopyFile(PChar(Edit2.Text), PChar(Edit1.Text), False) then
   Application.MessageBox('Die Datei konnte nicht kopiert werden.', 'Fehler' ,
    MB_ICONSTOP);
end;
Funktioniert auch über Laufwerksgrenzen hinweg.

Viele Grüsse,
Macci

DeddyH 1. Nov 2008 16:33

Re: Datei 1 mit Datei 2 ersetzen
 
Delphi-Quellcode:
function Umbenennen(const OldName, NewName: string): Boolean;
begin
  Result := MoveFileEx(PAnsiChar(OldName),PAnsiChar(NewName),MOVEFILE_REPLACE_EXISTING or MOVEFILE_COPY_ALLOWED);
end;
Das soll laut MSDN auch über Laufwerksgrenzen hinweg funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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