So stellen Sie sicher, dass das Dateisystem beim Ändern von Dateien auf einem USB -Laufwerk aktualisiert wirdJava

Java-Forum
Anonymous
 So stellen Sie sicher, dass das Dateisystem beim Ändern von Dateien auf einem USB -Laufwerk aktualisiert wird

Post by Anonymous »

Ich habe an einer Android -App gearbeitet, die Dateien auf und aus einem verbundenen USB -Laufwerk verschiebt. Für den Umzug ist der grundlegende Code, den ich verwende

Code: Select all

file.copyRecursively(File(target, file.name), overwrite = true)
file.deleteRecursively()
< /code>
Eine interessante Eigenart des Geräts, auf das ich abzielte, ist, dass die Standardbenachrichtigung für ein Anschluss angeschlossen wird, mit dem der Benutzer explizit auswerfen kann. Ich zeige einen Fortschrittszustand in der Benutzeroberfläche, während die Dateien verschoben werden (mit dem obigen Code), um zu signalisieren, dass die Festplatte nicht herausgezogen werden sollte. Wenn ich jedoch schnell nach danach ausgestoßen bin, ende ich oft mit 0B -Dateien auf dem USB -Laufwerk (für Dateien, die von der lokalen Festplatte auf das Laufwerk verschoben werden). Ich habe es geschafft, dies zu [url=viewtopic.php?t=23756]beheben[/url] (soweit ich das beurteilen kann), indem ich eine modifizierte Version von Copyresiv 
schreibe, die FSYNC nach der Kopie verwendet (nach der Jagd und dem Finden dieses Beitrags):
> >>>> >>>

Code: Select all

this.inputStream().use { input ->
target.outputStream().use { output ->
input.copyTo(output, bufferSize)
output.flush()
output.fd.sync()
}
}
< /code>
Jetzt wird der UI -Fortschrittszustand lang genug gezeigt, dass die Dateien auf dem Laufwerk intakt sind, wenn das USB -Laufwerk sofort herausgezogen wird. Ich gehe davon aus, dass dies auf einen Unterschied liegt, wie Deletten im Exfat "verpflichtet" werden (im Gegensatz zu FAT32). Ich habe versucht, die gelöschte Datei nach dem Löschen von FSYNC 
zu betreiben, die nicht überraschend funktionierten, und auch die Verwendung von Java -Dateien zu wechseln. die entsprechende Zeit oder das Dateisystem des Laufwerks zum Aktualisieren zwingen? Würde dies das Tauchen in einen nativen Code erfordern? Ist dies nur der "Ausstrahlungsprozess" des Betriebssystems (der Apps on Android nicht zur Verfügung steht)?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post