Udostępnij przez


Czasy plików

czas pliku jest wartością 64-bitową, która reprezentuje liczbę 100-nanosekundowych interwałów, które upłynęły od 12:00 rano 1 stycznia 1601 koordynowany czas uniwersalny (UTC). System rejestruje czasy plików, gdy aplikacje tworzą, uzyskują dostęp i zapisują do plików.

System plików NTFS przechowuje wartości czasu w formacie UTC, więc nie mają one wpływu na zmiany w strefie czasowej lub czasu letniego. System plików FAT przechowuje wartości czasu na podstawie czasu lokalnego komputera. Na przykład plik zapisany o godzinie 15:00 PST w Waszyngtonie jest postrzegany jako 18:00 EST w Nowym Jorku na woluminie NTFS, ale jest postrzegany jako 15:00 EST w Nowym Jorku na woluminie FAT.

Sygnatury czasowe są aktualizowane w różnych momentach i z różnych powodów. Jedyną gwarancją sygnatury czasowej pliku jest to, że czas pliku jest poprawnie odzwierciedlony po zamknięciu uchwytu, który wprowadza zmianę.

Nie wszystkie systemy plików mogą rejestrować czasy tworzenia i ostatniego dostępu, a nie wszystkie systemy plików rejestrują je w ten sam sposób. Na przykład rozdzielczość czasu tworzenia w systemie FAT wynosi 10 milisekund, podczas gdy czas zapisu ma rozdzielczość 2 sekund, a czas dostępu ma rozdzielczość 1 dnia, więc jest to naprawdę data dostępu. System plików NTFS opóźnia aktualizacje ostatniego czasu dostępu do pliku o maksymalnie 1 godzinę po ostatnim dostępie.

Aby pobrać czasy plików dla określonego pliku, użyj funkcji GetFileTime. GetFileTime kopiuje tworzenie, ostatni dostęp i czas ostatniego zapisu do poszczególnych struktur FILETIME. Możesz również pobrać czasy plików przy użyciu funkcji FindFirstFile i FindNextFile. Te funkcje kopiują czasy plików do struktury FILETIME w strukturze WIN32_FIND_DATA. Podczas zapisywania w pliku czas ostatniego zapisu nie jest w pełni aktualizowany do momentu zamknięcia wszystkich dojść używanych do zapisu.

Aby ustawić czasy plików dla pliku, użyj funkcji SetFileTime. Ta funkcja umożliwia modyfikowanie tworzenia, ostatniego dostępu i ostatniego czasu zapisu bez zmieniania zawartości pliku. Czasy różnych plików można porównać przy użyciu funkcji CompareFileTime. Funkcja porównuje dwa razy plik i zwraca wartość wskazującą, który czas jest późniejszy lub zwraca wartość 0 (zero), jeśli czasy są równe.

Jeśli planujesz zmodyfikować czasy plików dla określonych plików, możesz przekonwertować datę i godzinę dnia na godzinę pliku przy użyciu funkcji SystemTimeToFileTime. Możesz również uzyskać czas systemowy w strukturze FILETIME, wywołując funkcjęGetSystemTimeAsFileTime.

Aby ułatwić wyświetlanie pliku użytkownikowi, użyj funkcji FileTimeToSystemTime. FileTimeToSystemTime konwertuje czas pliku i kopiuje miesiąc, dzień, rok i godzinę dnia z godziny pliku do struktury SYSTEMTIME.

Czasy plików i czas letni

Należy zachować ostrożność podczas korzystania z plików, jeśli użytkownik ustawił system, aby automatycznie dostosować czas letni.

Aby przekonwertować czas pliku na czas lokalny, użyj funkcji FileTimeToLocalFileTime. Jednak FileTimeToLocalFileTime używa bieżących ustawień strefy czasowej i czasu letniego. W związku z tym, jeśli jest to czas letni, czas letni jest uwzględniany, nawet jeśli czas konwersji pliku jest w czasie standardowym.

System plików FAT rejestruje czasy na dysku w czasie lokalnym. GetFileTime pobiera buforowane godziny UTC z systemu plików FAT. Gdy staje się czas letni, czas pobierany przez GetFileTime jest wyłączony godzinę, ponieważ pamięć podręczna nie jest aktualizowana. Po ponownym uruchomieniu komputera czas buforowany, który GetFileTime pobiera, jest poprawny. FindFirstFile pobiera czas lokalny z systemu plików FAT i konwertuje go na UTC przy użyciu bieżących ustawień strefy czasowej i czasu letniego. W związku z tym, jeśli jest to czas letni, FindFirstFile bierze pod uwagę czas letni, nawet jeśli czas konwersji pliku jest w czasie standardowym.

System plików NTFS rejestruje czasy na dysku w utc. Aby uwzględnić czas letni podczas konwertowania pliku na czas lokalny, użyj następującej sekwencji funkcji zamiast używać FileTimeToLocalFileTime:

Czasy plików i system plików CDFS

Sygnatury daty i godziny plików znajdujących się na nośniku lub pochodzące z nośnika przy użyciu systemu plików Compact Disc (CDFS) są dostosowywane dla lokalnej strefy czasowej. Iso 9660 stwierdza, że system plików CDFS ma wyświetlać poprawne informacje o dacie dla lokalnej strefy czasowej. Dzieje się tak, aby daty plików w systemie plików CDFS były wyświetlane tak samo jak w formacie UDF (Universal Disk Format). Funkcja UDF jest nowszym standardem dla nośników dystrybucji. Jeśli kod zależy od niezmodyfikowanych informacji o dacie pliku, który znajduje się na nośniku lub pochodzi z nośnika przy użyciu systemu plików CDFS, może nie działać poprawnie.