![]() |
Schreibgeschützte Dateien kopieren?
Hallo!
Ich habe einen Tipp bei "Swissdelphicenter" gefunden, wie mann eine Datei mit Fortschrittsanzeige kopiert.
Delphi-Quellcode:
Diese Code schlägt aber fehl, wenn die Quelldatei (z.B. auf einer CD) schreibgeschützt ist. Wie kann ich die Code so modernisieren, dass es auch für schreibgeschützte Dateien tauglich ist?
procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var FromF, ToF: file of byte; Buffer: array[0..4096] of char; NumRead: integer; FileLength: longint; begin AssignFile(FromF, Source); reset(FromF); AssignFile(ToF, Destination); rewrite(ToF); FileLength := FileSize(FromF); with Progressbar1 do begin Min := 0; Max := FileLength; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); Position := Position + NumRead; end; CloseFile(FromF); CloseFile(ToF); end; end; Danke! |
Re: Schreibgeschützte Dateien kopieren?
Das ganze schlägt fehl wei du die Datei exclusiv öffnest. Zudem würde ich, wenn man Object-Pascal programmiert, die Verwendung der Klasse TFileStream empfehlen.
|
Re: Schreibgeschützte Dateien kopieren?
Schau dir mal die Variable
![]() Oder stell es auf TFileStream um, das wäre eh die bessere Alternative... |
Re: Schreibgeschützte Dateien kopieren?
moin,
ich persönlich kann nur immer wieder sagen benutzt die Funktionen: FileOpen(), FileRead(), FileSeek() und FileClose(). Diese Funktionen können auch Dateien verwalten, die größer als 4 Gb sind. Außerdem ist die Benutzung mit diesen Funktionen nicht ganz so umständlich, wie TFileStream oder BlockRead/Write/Seek etc. |
Re: Schreibgeschützte Dateien kopieren?
Moin bigg,
auch TFileStream kann, zumindest ab D7 (D6?), auch mit grossen Dateien umgehen. Was das Handling angeht: TFileStream kapselt die von Dir genannten Funktionen, die wiederum nur die zugrunde liegenden API-Funktionen kapseln. Wenn ich jetzt, beispielsweise, die Dateigrösse benötige, finde ich es praktischer die Eigenschaft Size von TFileStream zu benutzen, als sie mir mit Hilfe einer weiteren Funktion auszulesen. |
Re: Schreibgeschützte Dateien kopieren?
moin moin, :)
Zitat:
PS: Hier noch eine Funktion die Hagen mal gepostet hatte, um Dateigrößen < 4 GB zu lesen:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Größe einer Datei ermitteln (auch Dateien über 4 GB) //////////////////////////////////////////////////////////////////////////////// function GetFileSize(const FileName: String): Int64; var FileHandle: Cardinal; var Data: WIN32_FIND_DATA; begin Result := -1; FileHandle := FindFirstFile(PChar(FileName), Data); try if FileHandle > 0 then begin Int64Rec(Result).Hi := Data.nFileSizeHigh; Int64Rec(Result).Lo := Data.nFileSizeLow; end; finally Windows.FindClose(FileHandle); end; end; |
Re: Schreibgeschützte Dateien kopieren?
Moin bigg,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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