Wie stellen Sie sicher, dass eine Datei dauerhaft auf USB gespeichert wurde, wenn der Benutzer nicht nicht verwendet „Hardware sicher entfernen“?
Frage
Wenn ich eine Datei auf einem USB innerhalb meiner delphi Anwendung speichern, wie kann ich sicherstellen, dass die Datei wirklich ist (permanent) auf dem USB gespeichert, wenn „Hardware sicher entfernen“ nicht durchgeführt wird (vor allem vergessen zu verwenden) br>
Telling unserer Kunden zu verwenden die Fenster sind mit „Hardware sicher entfernen“ funktioniert nicht.
Gibt es einen Windows-API-Befehl die Puffer zu leeren, so dass alle Daten auf das USB-Laufwerk geschrieben werden dauerhaft ein?
Lösung
Hier ist eine Funktion, die ich verwendet, um Daten auf einem USB-Laufwerk zu spülen, bevor es programmatisch ausgestoßen wird. Diese Klone Funktionalität von Mark Russinovich "Sync" Dienstprogramm . Ich habe mit diesem Code keine Probleme gehabt und es hat ein paar Jahren auf vielen Systemen läuft.
Andere Tipps
Wenn Sie die Datei öffnen, geben Sie "Write-Through" (FILE_FLAG_WRITE_THROUGH Flagge zu Createfile ()). Dadurch wird die OS zwingen direkt um die Datei zu schreiben. Es kann immer noch in dem OS-Cache zu beschleunigen nachfolgend liest, aber das ist kein Problem für Sie.
Wenn Sie nicht möchten, Dateipuffer leeren, gibt es natürlich immer Flushfilebuffers ()
was auch immer geschieht, können Sie das Gerät selbst ziehen, ich meine programmatisch. dann werden Sie ganz sicher sein, sie das Gerät ordnungsgemäß entfernt haben.
haben einen Blick auf die Antworten auf diese Frage: Safe-remove-usb -Antrieb-using-win32-api . insbesondere Link in Msdn Kbartikel gegeben in der Antwort.