W jaki sposób Windows decyduje, który z dwóch plików z identycznymi znacznikami czasu jest nowszy?
Co to znaczy, gdy masz dwa identyczne pliki z identycznymi znacznikami czasu, ale Windows mówi, że jeden plik jest nowszy od drugiego? Jak to możliwe? Dzisiejszy post pytań i odpowiedzi dla SuperUser pomaga zagmatwanemu czytelnikowi rozwiązać zagadkę czasu.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.
Pytanie
Czytnik SuperUser WBT chce wiedzieć, jak Windows decyduje, który z dwóch plików z identycznymi znacznikami czasu jest nowszy:
Gdy system Windows wyświetla takie okno dialogowe z pasującymi znacznikami czasu, w jaki sposób określa, który z tych dwóch plików jest nowszy?
Najpierw myślałem, że system Windows porównuje datę utworzenia atrybutu i używa wyniku tego porównania do oznaczenia jednej lub drugiej jako nowszej. Jeśli plik został skopiowany do określonej lokalizacji, może mieć datę utworzenia kopii, a nie datę utworzenia oryginalnego pliku. Jednak po odtworzeniu go z innym plikiem wynik, z którego jeden jest nowszy, wydaje się być odwrotny:
Wynik jest taki sam, niezależnie od tego, czy kopiujesz, czy przenosisz plik:
A dla tła plik w teście2 jest poprzednio utworzoną kopią pliku w teście 1.
W jaki sposób system Windows decyduje, który z dwóch plików z identycznymi znacznikami czasu jest nowszy?
Odpowiedź
Nadawca SuperUser ma dla nas odpowiedź:
Znaczniki czasu w systemie plików NTFS mają rozdzielczość 100 nanosekund (0.0000001 s). Nawet jeśli okno dialogowe właściwości pokazuje tę samą zaokrągloną wartość, możliwe, że pliki zostały utworzone w ciągu dziesiętnych sekund od siebie.
Uwaga: Większość systemów plików mierzy czasy w μs lub ns. FAT32 to trochę reliktu i zaokrągla znaczniki czasu do dwóch sekund.
Wypróbuj jedną z następujących metod porównywania pełnych znaczników czasu:
- wmic datafile gdzie name = "c: \\ foo \\ bar.txt" zostaje zmodyfikowane
Przez PowerShell:
- (Get-ChildItem c: \ foo \ bar.txt) .LastWriteTime.ToString ("o")
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.
Image Credit: WBT (SuperUser)