Разница между модификацией time_time и change_time в fs :: file_info () - PullRequest
0 голосов
/ 24 октября 2019

Пакет R fs предоставляет функцию file_info(), которая возвращает тиббл, содержащий переменные:

  • modification_time Время последнегоизменение данных, как дата-время POSIXct.
  • access_time Время последнего доступа - как дата-время POSIXct.
  • change_time Время последнего изменения состояния файла - как дата-время POSIXct.

Теперь мне интересно В чем различия между modification_time и change_time?

Что я заметил до сих пор, так это то, что change_time кажетсябыть невосприимчивым к "хронологическим несоответствиям". Пример:

library(magrittr)
fs::file_create("test_file")
fs::file_info("test_file") %>% dplyr::select(modification_time, access_time, change_time)
#> # A tibble: 1 x 3
#>   modification_time   access_time         change_time        
#>   <dttm>              <dttm>              <dttm>             
#> 1 2019-10-24 13:23:35 2019-10-24 13:23:35 2019-10-24 13:23:35

# change access and modification times to current Sys.time()
# -> both modification_time and change_time will be updated
Sys.sleep(1)
fs::file_touch("test_file")
fs::file_info("test_file") %>% dplyr::select(modification_time, access_time, change_time)
#> # A tibble: 1 x 3
#>   modification_time   access_time         change_time        
#>   <dttm>              <dttm>              <dttm>             
#> 1 2019-10-24 13:23:37 2019-10-24 13:23:37 2019-10-24 13:23:37

# change access and modification times to the past (-2 min)
# -> only modification_time will be updated
fs::file_touch("test_file", Sys.time() - 120)
fs::file_info("test_file") %>% dplyr::select(modification_time, access_time, change_time)
#> # A tibble: 1 x 3
#>   modification_time   access_time         change_time        
#>   <dttm>              <dttm>              <dttm>             
#> 1 2019-10-24 13:21:37 2019-10-24 13:21:37 2019-10-24 13:23:37

# change  access and modification times to the future (+5 min)
# -> only modification_time will be updated
fs::file_touch("test_file", Sys.time() + 300)
fs::file_info("test_file") %>% dplyr::select(modification_time, access_time, change_time)
#> # A tibble: 1 x 3
#>   modification_time   access_time         change_time        
#>   <dttm>              <dttm>              <dttm>             
#> 1 2019-10-24 13:28:37 2019-10-24 13:28:37 2019-10-24 13:23:37

Создано в 2019-10-24 с помощью пакета Представить (v0.3.0)

Базовая функция R file.mtime() возвращает только modification_time сверху.

1 Ответ

0 голосов
/ 24 октября 2019

Полагаю, ответ имеет два аспекта:

  1. Приведенный выше пример вводит в заблуждение! change_time всегда изменяется при изменении access_time или modification_time - он просто не воспринимается из вышеприведенного вывода, потому что разрешение по времени слишком низкое (секунды).

  2. modification_time дает метку времени изменения файла . Это (а также access_time) может быть перезаписано пользователем с помощью таких инструментов, как touch или fs::file_touch().

    change_time, с другой стороны, дает метку изменения метаданных , и не может быть изменен пользователем напрямую. Метаданные относятся к времени последнего доступа, времени последнего изменения, разрешениям и другим свойствам , перечисленным в этом ответе на другой вопрос переполнения стека .

...