Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задают время изменения файла.
Синтаксис
int _utime( // See note in remarks section about linkage
const char *filename,
struct _utimbuf *times
);
int _utime32(
const char *filename,
struct __utimbuf32 *times
);
int _utime64(
const char *filename,
struct __utimbuf64 *times
);
int _wutime( // See note in remarks section about linkage
const wchar_t *filename,
struct _utimbuf *times
);
int _wutime32(
const wchar_t *filename,
struct __utimbuf32 *times
);
int _wutime64(
const wchar_t *filename,
struct __utimbuf64 *times
);
Параметры
filename
Указатель на строку, содержащую путь или имя файла.
times
Указатель на сохраненные значения времени.
Возвращаемое значение
Каждая из этих функций возвращает 0, если время изменения файла было изменено. Возвращаемое значение -1 указывает на ошибку. Если передается недопустимый параметр, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение разрешено продолжать, эти функции возвращают -1 и errno задаются одно из следующих значений:
Значение errno |
Condition |
|---|---|
EACCES |
Путь указывает каталог или файл, доступный только для чтения |
EINVAL |
Недопустимый аргумент times |
EMFILE |
Слишком много открытых файлов (чтобы изменить время изменения файла, файл необходимо открыть) |
ENOENT |
Путь или имя файла не найдены |
Дополнительные сведения о кодах возврата см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.
Дату файла можно изменить, если дата изменения лежит в диапазоне от полуночи 1-го января 1970 года до конечной даты используемой функции. В функциях _utime и _wutime используется 64-разрядное значение времени, поэтому конечная дата 23:59:59 31-го декабря 3000 года, время в формате UTC. Если определена директива _USE_32BIT_TIME_T для принудительного использования старого поведения, конечная дата — 23:59:59 18 января 2038 года, время в формате UTC. Функции _utime32 и _wutime32 используют 32-разрядный тип времени независимо от того, определена ли директива _USE_32BIT_TIME_T, и всегда имеют более раннюю конечную дату. Функции _utime64 и _wutime64 всегда используют 64-разрядный тип времени, поэтому эти функции всегда поддерживают более позднюю конечную дату.
Замечания
Функция _utime задает время изменения для файла, указанного в filenameфайле. Для изменения времени процесс должен иметь разрешение на запись в файл. В операционной системе Windows можно изменить время доступа и время изменения в структуре _utimbuf. Если times является указателем NULL, для времени изменения устанавливается текущее время. В противном случае переменная times должна указывать на структуру типа _utimbuf, определенную в SYS\UTIME.H.
Структура _utimbuf хранит время доступа к файлу и время изменения файла, которые используются функцией _utime для изменения времени изменения файла. Структура содержит следующие поля, оба из которых имеют тип time_t:
| Поле | Description |
|---|---|
actime |
Время доступа к файлу |
modtime |
Время изменения файла |
Конкретные версии структуры _utimbuf (__utimbuf32 и __utimbuf64) задаются с 32- и 64-разрядными версиями типа времени. Эти структуры используются в 32-разрядных и 64-разрядных версиях этой функции. По умолчанию в структуре _utimbuf используется 64-разрядное время, если только не определена директива _USE_32BIT_TIME_T.
Функция _utime идентична функции _futime, но аргумент filename функции _utime представляет собой имя файла или путь к файлу, а не дескриптор открытого файла.
_wutime — это версия _utimeс расширенными символами; аргумент filename для _wutime — строка расширенных символов. В остальном эти функции ведут себя одинаково.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Замечание
При использовании пакета SDK для Windows версии 10.0.26100.6901 и Visual Studio 2026 или более поздней версии и _utime_wutime больше не static inline (внутренняя компоновка). Вместо этого они inline (внешняя компоновка).
Чтобы вернуться к предыдущему поведению, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 прежде чем включать любые заголовки CRT. По умолчанию параметр _STATIC_INLINE_UCRT_FUNCTIONS имеет значение 0.
Это изменение повышает соответствие UCRT стандарту C++ и улучшает совместимость с модулями C++.
Сопоставления подпрограмм универсального текста
| Подпрограмма TCHAR.H |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
|---|---|---|---|
_tutime |
_utime |
_utime |
_wutime |
_tutime32 |
_utime32 |
_utime32 |
_wutime32 |
_tutime64 |
_utime64 |
_utime64 |
_wutime64 |
Требования
| Маршрут | Обязательные заголовки | Необязательные заголовки |
|---|---|---|
_utime, , _utime32_utime64 |
<sys/utime.h> | <errno.h> |
_utime64 |
<sys/utime.h> | <errno.h> |
_wutime |
<utime.h> или <wchar.h> | <errno.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
Эта программа использует функцию _utime, чтобы задать для времени изменения файла текущее время.
// crt_utime.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/utime.h>
#include <time.h>
int main( void )
{
struct tm tma = {0}, tmm = {0};
struct _utimbuf ut;
// Fill out the accessed time structure
tma.tm_hour = 12;
tma.tm_isdst = 0;
tma.tm_mday = 15;
tma.tm_min = 0;
tma.tm_mon = 0;
tma.tm_sec = 0;
tma.tm_year = 103;
// Fill out the modified time structure
tmm.tm_hour = 12;
tmm.tm_isdst = 0;
tmm.tm_mday = 15;
tmm.tm_min = 0;
tmm.tm_mon = 0;
tmm.tm_sec = 0;
tmm.tm_year = 102;
// Convert tm to time_t
ut.actime = mktime(&tma);
ut.modtime = mktime(&tmm);
// Show file time before and after
system( "dir crt_utime.c" );
if( _utime( "crt_utime.c", &ut ) == -1 )
perror( "_utime failed\n" );
else
printf( "File time modified\n" );
system( "dir crt_utime.c" );
}
Пример полученных результатов
Volume in drive C has no label.
Volume Serial Number is 9CAC-DE74
Directory of C:\test
01/09/2003 05:38 PM 935 crt_utime.c
1 File(s) 935 bytes
0 Dir(s) 20,742,955,008 bytes free
File time modified
Volume in drive C has no label.
Volume Serial Number is 9CAC-DE74
Directory of C:\test
01/15/2002 12:00 PM 935 crt_utime.c
1 File(s) 935 bytes
0 Dir(s) 20,742,955,008 bytes free
См. также
Управление временем
asctime, _wasctime
ctime, , _ctime32_ctime64_wctime_wctime32,_wctime64
_fstat, , _fstat32_fstat64_fstati64_fstat32i64,_fstat64i32
_ftime, , _ftime32_ftime64
_futime, , _futime32_futime64
gmtime, , _gmtime32_gmtime64
localtime, , _localtime32_localtime64
_stat, _wstat функции
time, , _time32_time64