Datei.lastModified() ist noch nie was eingestellt war-Datei.setLastModified()
Ich habe ein problem mit millis setzen und Lesen auf Android 2.3.4 auf einem Nexus One. Dies ist der code:
File fileFolder = new File(Environment.getExternalStorageDirectory(), appName + "/"
+ URLDecoder.decode(folder.getUrl()));
if (fileFolder != null && !fileFolder.exists()) {
fileFolder.setLastModified(1310198774);
fileFolder.mkdirs();
fileFolder.setLastModified(1310198774);
}
if (fileFolder != null && fileFolder.exists()) {
long l = fileFolder.lastModified();
}
In diesem kleinen test Schreibe ich 1310198774 aber das Ergebnis, das zurückgegeben wird, von lastModified() ist 1310199771000.
Selbst wenn ich schneiden Sie die nachfolgende "000" gibt es einen Unterschied von mehreren Minuten.
Brauche ich zum synchronisieren von Dateien zwischen einem webservice und das Android-Gerät. Die lastmodification millis sind Teil der Daten, die gesendet werden von diesem service. Ich die millis zu den erstellten/kopierten Dateien und Ordner, um zu überprüfen, ob die Datei/Ordner muss überschrieben werden.
Alles funktioniert, ABER die millis, die zurückgegeben werden aus dem Dateisystem Verschieden sind von den Werten, die gesetzt wurden.
Ich bin mir ziemlich sicher, dass es etwas falsch mit meinem code, aber ich kann es nicht finden.
Vielen Dank im Voraus.
HJW
InformationsquelleAutor der Frage Harald Wilhelm | 2011-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also vielleicht bin ich etwas fehlt, aber ich sehe einige Probleme mit dem code oben. Ihr problem kann durch (wie @JB genannt), um Android-Themen, sondern für die Nachwelt, ich dachte, ich hätte eine Antwort.
First off,
File.setLastModified()
nimmt sich die Zeit, in Millisekunden. Hier sind die javadocs. Sie scheinen es zu versuchen, um es in Sekunden. Also dein code sollte so etwas wie:Wie erwähnt, in den javadocs, viele Dateisysteme unterstützen nur Sekunden Granularität für die last-modification time. Also, wenn Sie brauchen, um die gleiche änderung der Zeit in eine Datei, dann sollten Sie etwas wie die folgende:
InformationsquelleAutor der Antwort Gray
Auf Jelly Bean+, ist es anders (meistens auf Nexus-Geräte noch nicht, und andere, verwenden Sie die neue Sicherung wieder Schicht für /mnt/shell/emulated SD-Karte-emulation):
Es ist ein VFS-permission-problem, die syscall utimensat () - Fehler EPERM aufgrund ungeeigneter Berechtigungen (z.B. Eigentum).
in Plattform/system/core/sdcard/sdcard.c:
Vom utimensat()'s syscall-Mann-Seite:
Alt FETT bietet eine überschreibung der iattr->gültige flag über eine mount-option zum erlauben das verändern von Zeitstempeln für jedermann, SICHERUNG+Android-SD-Karte-SICHERUNG dies nicht tun im moment (also die 'inode_change_ok () - Aufruf fehlschlägt), und der Versuch wird abgelehnt mit -EPERM. Hier ist FETT ./fs/fat/Datei.c:
Ich habe auch diese info zu diesem Fehler.
InformationsquelleAutor der Antwort ce4
Wenn dies alles nicht funktioniert, versuchen diese (hässlichen) workaround zitiert aus https://code.google.com/p/android/issues/detail?id=18624:
InformationsquelleAutor der Antwort arne.jans
Funktioniert auf einigen Geräten, aber nicht auf andere. Nicht eine Lösung zu entwerfen, die sich auf es zu arbeiten. Sehen https://code.google.com/p/android/issues/detail?id=18624#c29
Hier ist ein einfacher test, um zu sehen, ob es funktioniert.
InformationsquelleAutor der Antwort Hayes Haugen
Wenn Sie nur wollen, ändern Sie das Datum/Zeit von einem Verzeichnis auf das aktuelle Datum/Zeit (D. H., "jetzt"), dann erstellen Sie eine Art von temporären Datei innerhalb dieses Verzeichnisses, schreiben Sie etwas hinein, dann sofort zu löschen. Dies hat den Effekt, die änderung der " lastModified()' Datum/Uhrzeit des Verzeichnisses der aktuellen Datum/Zeit. Das wird nicht funktionieren, obwohl, wenn Sie möchten, um das Verzeichnis zu ändern-Datum/Zeit zu einigen anderen zufälligen Wert, und kann nicht auf eine Datei angewendet, offensichtlich.
InformationsquelleAutor der Antwort DDSports