Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 12. Okt 2007, 10:08
Hallo,

also ich habe da noch ein bisschen in Richtung DeviceIOContro weiter gesucht und das gefunden was ich wollte.
Die Lösung sieht wie folgt aus (Die Funktion war hier irgendwo auch so im Forum bei einer Frage dabei).

Jedes mal wenn man fertig ist mit schreiben und das typische CloseFile oder FileStream.Free kommt einfach noch folgender Aufruf:

Delphi-Quellcode:
function Umount(Laufwerk: Char): Boolean;
const
  IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
  FSCTL_DISMOUNT_VOLUME = $90020;
var
  hDrive: Cardinal;
  bytesRet: Cardinal;
begin
  hDrive := CreateFile(PAnsiChar('\\.\' + Laufwerk + ':'),
                       GENERIC_READ or GENERIC_WRITE,
                       FILE_SHARE_READ or FILE_SHARE_WRITE,
                       nil,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING,
                       0);

  if hDrive <> INVALID_HANDLE_VALUE then
  begin
    DeviceIOControl(hDrive, FSCTL_DISMOUNT_VOLUME, nil, 0, nil, 0, bytesRet, nil);
    CloseHandle(hDrive);
    result := TRUE;
  end else result := FALSE;
end;
IOCTL_STORAGE_EJECT_MEDIA sorgt dafür, dass der Fehler nicht mehr auftritt. Problem war, dass ein Zugriff auf das Medium danach nicht mehr möglich ist. Der Anwender wäre gezwungen die SD-Karte raus zu ziehen und wieder ein zu stecken.
FSCTL_DISMOUNT_VOLUME hat den richtigen Effekt. Der Datenträger wird beim nächsten Zugriffsversuch automatisch vom System wieder gemountet.
Das nur für die Leute, die irgendwann auch mal auf dieses Problem stoßen.

Danke an alle.

Gruß Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat