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)
Thema durchsuchen
Ansicht
Themen-Optionen

Datei kopieren (datei wird verwendet)

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

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

Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 15:45
Kann man irgendwie eine datei, die gerade von einem anderen programm verwendet wird kopieren?

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 15:52
Hallo,

ja

Was hast Du vor, willst Du selber kopieren oder per Batch oder per Explorer oder...

Meinst Du eventuell sowas?
iFileHandle := FileOpen('dateiname', fmShareDenyNone); Damit lassen sich zumindest Dateien zum Lesen öffenen, in die der IIS gerade seine Protokolle schreibt, naja und lesen dürfte ja zum Kopieren reichen.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

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

Re: Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 15:57
hey,

ich will damit eine datei kopieren, eigentlich über das delphi interne CopyFile. Mal eine blöde frage wie kann ich dann über den filehandle die datei kopieren ? evtl auch mit tfilestream >.<

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 16:12
Hallo,
Delphi-Quellcode:
iFileHandleIn := FileOpen(opendialog1.Files[l], fmShareDenyNone);
iFileLength := FileSeek(iFileHandleIn,0,2);
FileSeek(iFileHandleIn,0,0);
Buffer := PChar(AllocMem(iFileLength + 1));
iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
FileClose(iFileHandle);
Jetzt ist die Datei in Buffer, und den dann mit FileWrite in eine andere Datei schreiben.
Delphi-Quellcode:
iFileHandleOut := FileCreate(SaveDialog1.FileName);
FileWrite(iFileHandleOut,Buffer,SizeOfBuffer));
FileClose(iFileHandleOut);
Das ist jetzt nur so "hingedaddelt", sollte aber vom Prinzip funktionieren. Wenn die Datei was größer ist, musst Du sie stückweise in Buffer lesen und dann schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

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

Re: Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 16:29
hm,
ich versuch gerade den fehler zu lokalisieren ... aber irgendwie erstelt er die dateien zwar alle, aber die haben 0KB und sind leer

EDIT:

hab mir folgende procedure draus gebastelt ...

Delphi-Quellcode:
procedure CopyEx(const FileName, NewFile: string);
 var
  iFileHandleIn,iFileLength,iBytesRead:integer;
  buffer:pointer;
  iFileHandleOut,sizeofbuffer:integer;
begin
 iFileHandleIn := FileOpen(filename, fmShareDenyNone);
 iFileLength := FileSeek(iFileHandleIn,0,2);
 FileSeek(iFileHandleIn,0,0);
 Buffer := PChar(AllocMem(iFileLength + 1));
 iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
 FileClose(iFileHandleIn);
 iFileHandleOut := FileCreate(NewFile);
 FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
 FileClose(iFileHandleOut);
end;
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 Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 16:53
Etwas Fehlerbehandlung im Code hilft auch bei der Fehlersuche.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

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

Re: Datei kopieren (datei wird verwendet)

  Alt 7. Okt 2008, 17:14
Zitat von Luckie:
Etwas Fehlerbehandlung im Code hilft auch bei der Fehlersuche.
Das problem ist wohl eher darin begründet, dass ich den code nichtmal verstehe

EDIT: hab das ganze mal so kommentiert wie ich denke, dass es abläuft ... bitte um korrektur
Delphi-Quellcode:
procedure TForm1.CopyEx(const FileName, NewFile: string);
 var
  iFileHandleIn,iFileLength,iBytesRead:integer;
  buffer:pointer;
  iFileHandleOut,sizeofbuffer:integer;
begin
 //holt sich das handle zum file
 iFileHandleIn := FileOpen(filename, fmShareDenyNone);
 //holt sich den pointer auf das ende des files
 iFileLength := FileSeek(iFileHandleIn,0,2);
 //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));
 //schreibt den inhalt der datei vom anfang bis zum pointer auf das ende in den buffer
 iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
 //schliesst das file
 FileClose(iFileHandleIn);
 //erstellt ein neues file
 iFileHandleOut := FileCreate(NewFile);
 //schreibt den inhalt des buffers in das neue file
 FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
 //schliesst das neue file
 FileClose(iFileHandleOut);
end;
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: Datei kopieren (datei wird verwendet)

  Alt 8. Okt 2008, 08:17
Hallo,
Zitat von ghost007:
Das problem ist wohl eher darin begründet, dass ich den code nichtmal verstehe

EDIT: hab das ganze mal so kommentiert wie ich denke, dass es abläuft ... bitte um korrektur
Delphi-Quellcode:
procedure TForm1.CopyEx(const FileName, NewFile: string);
 var
  iFileHandleIn,iFileLength,iBytesRead:integer;
  buffer:pointer;
  iFileHandleOut,sizeofbuffer:integer;
begin
 //holt sich das handle zum file
 iFileHandleIn := FileOpen(filename, fmShareDenyNone);
 //holt sich den pointer auf das ende des files
 iFileLength := FileSeek(iFileHandleIn,0,2);
 //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));
 //schreibt den inhalt der datei vom anfang bis zum pointer auf das ende in den buffer
 iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
 //schliesst das file
 FileClose(iFileHandleIn);
 //erstellt ein neues file
 iFileHandleOut := FileCreate(NewFile);
 //schreibt den inhalt des buffers in das neue file
 FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
 //schliesst das neue file
 FileClose(iFileHandleOut);
end;
ich vermute, dass der Fehler hier liegt:
Delphi-Quellcode:
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
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.

Ansonsten schau mal unter http://www.delphicorner.f9.co.uk/articles/misc4.htm und dort unter Quick and Dirty Copying, da ist ein Beispiel, dass sicherlich besser ist als meines.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#9

Re: Datei kopieren (datei wird verwendet)

  Alt 8. Okt 2008, 09:03
Es stellt sich aber grundasätzlich die Frage, ob es sinnvoll ist, eine Datei zu kopieren, die gerade in Benutzung eines anderen Programms ist. Das macht m.E. nur Sinn, wenn sichergestellt ist, dass die andere Anwendung nur lesenden Zugriff hat. Ist das in deinem speziellen Fall so?
Ralph
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

Re: Datei kopieren (datei wird verwendet)

  Alt 8. Okt 2008, 09:08
Hallo Ralf,
Zitat von taaktaak:
Es stellt sich aber grundsätzlich die Frage, ob es sinnvoll ist, eine Datei zu kopieren, die gerade in Benutzung eines anderen Programms ist. Das macht m.E. nur Sinn, wenn sichergestellt ist, dass die andere Anwendung nur lesenden Zugriff hat. Ist das in deinem speziellen Fall so?
prinzipiell hast Du recht, für die Auswertung von Logfiles muss ich aber stündlich die Dateien auswerten, während die Software, die die Logfiles erstellt, diese nur alle 24 Stunden wechselt. Beim Kopieren von zum Schreiben geöffneten Dateien, habe ich nie den wirklich aktuellen Stand und ggfls. auch mal nicht verwertbare Dateiinhalte. Es ist also Vorsicht geboten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 22:28 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