Einzelnen Beitrag anzeigen

devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datei kopieren ohne Cache (FILE_FLAG_NO_BUFFERING)

  Alt 27. Nov 2009, 12:09
Hallo,

ich muss eine größere Datei mehrfach von Position A zu Position B kopieren. Position A ist hier eine CD und Position B ein temporäres Verzeichnis auf der Festplatte. Ab dem 2. Versuch spring allerdings der Windows-Cache ein und ich kann die CD quasi herausnehmen, obwohl der Vorgang weiterläuft.

Deswegen muss ich diesen Vorgang ohne den Windows-Cache durchführen.

Bisher habe ich folgendes zum Öffnen des Laufwerks:

Delphi-Quellcode:
function KopiereDatei(Laufwerk: Char; Datei : string) : Boolean;
var handle : THandle;
begin
  Result:=False;
  Handle:=CreateFile(PChar('\\.\' + Laufwerk + ':'), GENERIC_READ, FILE_SHARE_READ, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING, 0);

  if Handle <> INVALID_HANDLE_VALUE then
  begin
    {hier müsste der Kopiervorgang starten}
  end;

  CloseHandle(Handle);
end;

begin
  if KopiereDatei('D', 'TESTFILE.DAT') = true then ShowMessage('Datei erfolgreich kopiert.') else ShowMessage('Fehler beim Kopieren der Datei.');
end;
Wie kann ich jetzt eigentlich die Kopieraktion implementieren? Muss das über BlockRead/BlockWrite mit einem Puffer geschehen?

Es gibt ja auch noch das Attribut FILE_FLAG_WRITE_THROUGH. Ist dieses als Alternative zu FILE_FLAG_NO_BUFFERING zu verwenden, oder kann man das zusätzlich machen?
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat