by Anonymous » 10 Jun 2025, 10:56
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)?
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]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 [/code] schreibe, die FSYNC nach der Kopie verwendet (nach der Jagd und dem Finden dieses Beitrags):
> >>>> >>>[code]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 [/code] 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)?