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?