AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei kopieren (datei wird verwendet)

Datei kopieren (datei wird verwendet)

Ein Thema von ghost007 · begonnen am 7. Okt 2008 · letzter Beitrag vom 11. Okt 2008
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#11

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 08:23
Zitat von nahpets:
müsste eher heißen:
Delphi-Quellcode:
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,iBytesRead);
SizeOfBuffer ist als Integer deklariert, bekommt aber keinen Wert zugewiesen und ist damit zufällig 0 und genausso groß ist auch die Datei. Mit iBytesRead sollten genauso viele Bytes geschrieben werden, wie vorher gelesen wurden.
So gehts leider auch nicht
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 09:27
Ich habe die Prozedur mal "aufgebohrt".
Delphi-Quellcode:
procedure TForm1.CopyEx(const FileName, NewFile: string);
var
  iFileHandleIn,iFileLength,iBytesRead,iBytesWritten:integer;
  buffer:pointer;
  iFileHandleOut,sizeofbuffer:integer;
begin
  //holt sich das handle zum file
  iFileHandleIn := FileOpen(filename, fmShareDenyNone);
  if iFileHandleIn > -1 then
    begin
      //holt sich den pointer auf das ende des files
      iFileLength := FileSeek(iFileHandleIn,0,2);
      if iFileLength > -1 then
        begin
          //setzt den pointer wieder auf den anfang des files
          FileSeek(iFileHandleIn,0,0);
          //reserviert speicher mit der größe des files
          Buffer := PChar(AllocMem(iFileLength + 1));
          if Assigned(Buffer) then
            begin
              //schreibt den inhalt der datei vom anfang bis zum pointer auf das ende in den buffer
              iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
              //erstellt ein neues file
              iFileHandleOut := FileCreate(NewFile);
              if iFileHandleOut > -1 then
                begin
                  //schreibt den inhalt des buffers in das neue file
                  iBytesWritten := FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
                  if iBytesWritten = -1 then
                    ShowMessage('Fehler bei FileWrite');
                  //schliesst das neue file
                  FileClose(iFileHandleOut);
                end
              else
                ShowMessage('Fehler bei CreateFile');
            end
          else
            ShowMessage('Buffer nicht zugewiesen');
        end
      else
        ShowMessage('Fehler bei FileSeek');
      //schliesst das file
      FileClose(iFileHandleIn);
    end
  else
    ShowMessage('Fehler bei Fileopen');
end;
Wenn ich nichts übersehen habe, solltest Du dem Fehler nun auf die Spur kommen können.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#13

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 10:13
Zitat von DeddyH:
Ich habe die Prozedur mal "aufgebohrt".
Delphi-Quellcode:
procedure TForm1.CopyEx(const FileName, NewFile: string);
var
  iFileHandleIn,iFileLength,iBytesRead,iBytesWritten:integer;
  buffer:pointer;
  iFileHandleOut,sizeofbuffer:integer;
begin
  //holt sich das handle zum file
  iFileHandleIn := FileOpen(filename, fmShareDenyNone);
  if iFileHandleIn > -1 then
    begin
      //holt sich den pointer auf das ende des files
      iFileLength := FileSeek(iFileHandleIn,0,2);
      if iFileLength > -1 then
        begin
          //setzt den pointer wieder auf den anfang des files
          FileSeek(iFileHandleIn,0,0);
          //reserviert speicher mit der größe des files
          Buffer := PChar(AllocMem(iFileLength + 1));
          sizeofbuffer:=iFileLength; //<<<--- die Bufferlänge gesetzt, fehlte noch

          if Assigned(Buffer) then
            begin
              //schreibt den inhalt der datei vom anfang bis zum pointer auf das ende in den buffer
              iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
              //erstellt ein neues file
              iFileHandleOut := FileCreate(NewFile);
              if iFileHandleOut > -1 then
                begin
                  //schreibt den inhalt des buffers in das neue file
                  iBytesWritten := FileWrite(iFileHandleOut,Buffer^,SizeOfBuffer); //<<<---- das ^ bei Buffer eingefügt
// ----------
                  if iBytesWritten = -1 then
                    ShowMessage('Fehler bei FileWrite');
                  //schliesst das neue file
                  FileClose(iFileHandleOut);
                end
              else
                ShowMessage('Fehler bei CreateFile');
            end
          else
            ShowMessage('Buffer nicht zugewiesen');
        end
      else
        ShowMessage('Fehler bei FileSeek');
      //schliesst das file
      FileClose(iFileHandleIn);
    end
  else
    ShowMessage('Fehler bei Fileopen');
end;
Wenn ich nichts übersehen habe, solltest Du dem Fehler nun auf die Spur kommen können.
Zwei Kleinigkeiten hab ich noch geändert.
Damit geht es.
Kurt
Für die kleinen Fehler haben wir Computer,
die großen Fehler machen wir selber.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 10:16
Thx, hatte eben nur C&P benutzt und nicht ausprobiert *g*
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#15

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 16:41
also, der code von euch zwei schmeißt mir die meldung raus "fehler bei fileopen "


...
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 16:48
Also klappt schon der Anfang nicht. Hast Du mal so versucht?
iFileHandleIn := FileOpen(filename, fmOpenRead or fmShareDenyNone);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#17

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 16:50
Hallo,
Zitat von ghost007:
also, der code von euch zwei schmeißt mir die meldung raus "fehler bei fileopen "


...
da gibt's nur zewi Möglichkeiten: Die Datei gibt's nicht, dass schließen wir aus oder das andere Programm hat sie exklusiv geöffnet.

Für das iFileHandleIn := FileOpen(filename, fmShareDenyNone); gibt es mehrere Möglichkeiten, eine weitere wäre
iFileHandleIn := FileOpen(filename, fmOpenRead or fmShareDenyNone); In der Hilfe müsstest Du finden, welche Werte ausser fmShareDenyNone, fmOpenRead noch möglich sind. Such Dir diese bitte heraus und versuche es dann mit unterschiedlichen Kombinationen. Welche Kombination zu welchem Zeitpunkt richtig ist, kann ich Dir beim besten Willen nicht sagen.

[OT]und DeddyH ist schon wieder schneller als ich [/OT]
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#18

Re: Datei kopieren (datei wird verwendet)

  Alt 11. Okt 2008, 11:39
könnte mir evtl jemand den auszug aus der hilfe hier posten? Unter vista kann ich die hilfe von Delphi 7 nicht mehr aufrufen -.- er sagt das format der hilfe-datei ist zu alt ....

Danke
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.286 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: Datei kopieren (datei wird verwendet)

  Alt 11. Okt 2008, 11:48
Mit diesem Download von MS geht die alte Hilfe auch unter Vista :
http://www.microsoft.com/downloads/d...0-334cd175d4bb
Sebastian Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#20

Re: Datei kopieren (datei wird verwendet)

  Alt 11. Okt 2008, 11:53
Zitat von jaenicke:
Mit diesem Download von MS geht die alte Hilfe auch unter Vista :
http://www.microsoft.com/downloads/d...0-334cd175d4bb
muchas gracias
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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