Как я делаю свои часы программы для модификации файла в C++?

Вышеуказанные ответы, по-видимому, не обрабатывают отрицательных значений временной шкалы (как, например, получается из pytz для часовых поясов, «оставленных» от UTC). Как указано в документации , объекты timedelta нормализованы, а отрицательная timedelta представлена ​​отрицательным атрибутом экземпляра day. Из документации:

Обратите внимание, что нормализация отрицательных значений может сначала удивить.

и

Строковые представления объектов timedelta нормализуются аналогично их внутреннему представлению. Это приводит к несколько необычным результатам для отрицательных timedeltas.

Например:

>>> td = timedelta(seconds=-30)
>>> str(td)
'-1 day, 23:59:30'
>>> repr(td)
'datetime.timedelta(-1, 86370)'

Учитывая этот пример timedelta, оба принятого ответа Шона Чина и ответа Гумпшена возвращают '23:59:30', и ответ mpounsett '-1:59:30'.

Я думаю, что для того, чтобы печатать как отрицательные, так и положительные временные интервалы более читабельным образом, нам нужно явно обработать знак и абсолютное значение объекта часового пояса: строковое представление:

>>> strfdelta(td, "%s%H:%M:%S")  # Note that %s refers to the timedelta’s sign.
'-00:00:30'
>>> strfdelta(timedelta(days=-1), "%s%D %H:%M:%S")
'-1 00:00:00'
>>> strfdelta(timedelta(days=-1, minutes=5), "%s%D %H:%M:%S")
'-0 23:55:00'
>>> strfdelta(timedelta(days=-1, minutes=-5), "%s%D %H:%M:%S")
'-1 00:05:00'

… или в более практическом контексте часовых поясов:

>>> import pytz
>>> import datetime
>>> td = pytz.timezone("Canada/Newfoundland").utcoffset(datetime.datetime.now())
>>> td
datetime.timedelta(-1, 77400)
>>> strfdelta(td, fmt="%s%H:%M")
'-02:30'
>>> td = pytz.timezone("Australia/Eucla").utcoffset(datetime.datetime.now())
>>> td
datetime.timedelta(0, 31500)
>>> strfdelta(td, fmt="%s%H:%M")
'+08:45'

67
задан Quinn Taylor 30 June 2009 в 17:03
поделиться

3 ответа

Есть несколько способов сделать это в зависимости от платформы. Я бы выбрал один из следующих вариантов:

Межплатформенный

Qt Trolltech имеет объект с именем QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда Я бы выбрал один из следующих вариантов:

Межплатформенный

Qt Trolltech имеет объект с именем QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда Я бы выбрал один из следующих вариантов:

Межплатформенный

Qt Trolltech имеет объект с именем QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда s Qt имеет объект под названием QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда s Qt имеет объект под названием QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет эту работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда но, по моему опыту, этот работает довольно хорошо.

Windows (Win32)

Существует Win32 api под названием FindFirstChangeNotification , который выполняет эту работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.

Windows (.NET Framework)

Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда System.IO.FileSystemWatcher - ваш выбор класса. У Microsoft есть хорошая статья о как отслеживать изменения файловой системы с помощью этого класса.

OS X

FSEvents API является новым для OS X 10.5 и очень полнофункциональным.

Linux

Используйте inotify , как упомянул Алекс в своем ответе.

97
ответ дан 24 November 2019 в 14:35
поделиться

Если вам не нужно быть независимым от платформы, подход в Linux, который может снизить нагрузку на машину, чем «опрос» (периодическая проверка), - inotify см., например, http://en.wikipedia.org/wiki/Inotify и множество ссылок на него. Для Windows см. http://msdn.microsoft.com/en-us/library/aa365261 (VS.85) .aspx .

18
ответ дан 24 November 2019 в 14:35
поделиться

Конечно, как и в VC ++. Вы получаете время последнего изменения, когда открываете файл, и вы периодически проверяете его, пока файл открыт. Если last_mod_time> saved_mod_time, это произошло.

5
ответ дан 24 November 2019 в 14:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: