_stat
, _stat32
, _stat64
_stati64
_stat32i64
_stat64i32
_wstat
_wstat32
_wstat64
_wstati64
_wstat32i64
_wstat64i32
Получает сведения о состоянии файла.
Синтаксис
int _stat(
const char *path,
struct _stat *buffer
);
int _stat32(
const char *path,
struct __stat32 *buffer
);
int _stat64(
const char *path,
struct __stat64 *buffer
);
int _stati64(
const char *path,
struct _stati64 *buffer
);
int _stat32i64(
const char *path,
struct _stat32i64 *buffer
);
int _stat64i32(
const char *path,
struct _stat64i32 *buffer
);
int _wstat(
const wchar_t *path,
struct _stat *buffer
);
int _wstat32(
const wchar_t *path,
struct __stat32 *buffer
);
int _wstat64(
const wchar_t *path,
struct __stat64 *buffer
);
int _wstati64(
const wchar_t *path,
struct _stati64 *buffer
);
int _wstat32i64(
const wchar_t *path,
struct _stat32i64 *buffer
);
int _wstat64i32(
const wchar_t *path,
struct _stat64i32 *buffer
);
Параметры
path
Указатель на строку, содержащую путь к существующему файлу или каталогу.
buffer
Указатель на структуру, в которой хранятся результаты.
Возвращаемое значение
Каждая из этих функций возвращает 0, если получена информация о состоянии файла. Возвращаемое значение -1 указывает на ошибку, в котором errno
задано ENOENT
значение , указывающее, что имя файла или путь не удалось найти. Возвращаемое значение EINVAL
указывает на недопустимый параметр; в этом случае параметр errno
также принимает значение EINVAL
.
Дополнительные сведения о кодах возврата см. в разделе errno
, _doserrno
_sys_errlist
и _sys_nerr
.
Метка даты в файле может быть представлена, если она позже полуночи, 1 января 1970 г. и до 23:59:59, 31 декабря 3000 г., UTC, если вы не используете _stat32
или _wstat32
не определили _USE_32BIT_TIME_T
, в этом случае дата может быть представлена только до 23:59:59 января 2038 г. в формате UTC.
Замечания
Функция _stat
получает сведения о файле или каталоге, указанном параметром path
, и сохраняет их в структуре, указанной в параметре buffer
. Функция_stat
автоматически требуемым образом обрабатывает аргументы в виде многобайтовых строк, распознавая многобайтовые последовательности символов в соответствии с текущей многобайтовой кодовой страницей.
_wstat
— это версия _stat
с расширенными символами; аргумент path
для _wstat
— строка расширенных символов. _wstat
и _stat
ведет себя одинаково, за исключением того, что _wstat
не обрабатывает строки многобайтовых символов.
Варианты этих функций поддерживают 32-разрядные или 64-разрядные типы времени, а также 32-разрядные или 64-разрядные длины файлов. Первый числовой суффикс (32
или 64
) указывает размер используемого типа времени; второй суффикс i32
или i64
показывает, представлен ли размер файла как 32- или 64-разрядное целое число.
_stat
эквивалентен _stat64i32
и struct _stat
содержит 64-разрядное время, если _USE_32BIT_TIME_T
не определено, в этом случае старое поведение действует; _stat
использует 32-разрядное время и struct _stat
содержит 32-разрядное время. Это же справедливо и для _stati64
.
Примечание.
_wstat
не работает с символьными ссылками Windows Vista. В таких случаях функция _wstat
всегда возвращает размер файла, равный 0. Функция_stat
правильно работает с символьными ссылками.
Семейство _stat
функций, используемых CreateFile
в Visual Studio 2015, а не FindFirstFile
в Visual Studio 2013 и более ранних версиях. Это означает, что на пути, заканчивающегося косой чертой, успешно выполняется, _stat
если путь относится к каталогу, а не раньше, когда функция будет ошибкой с errno
заданным значением ENOENT
.
Эта функция проверяет свои параметры. Если это path
или buffer
есть NULL
, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров".
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Варианты типа времени и длины файла _stat
Функции | _USE_32BIT_TIME_T Определенные |
Тип времени | Тип длины файла |
---|---|---|---|
_stat , _wstat |
Не определено | 64-разрядное | 32-разрядное |
_stat , _wstat |
Определено | 32-разрядное | 32-разрядное |
_stat32 , _wstat32 |
Не затрагивается определением макроса | 32-разрядное | 32-разрядное |
_stat64 , _wstat64 |
Не затрагивается определением макроса | 64-разрядное | 64-разрядное |
_stati64 , _wstati64 |
Не определено | 64-разрядное | 64-разрядное |
_stati64 , _wstati64 |
Определено | 32-разрядное | 64-разрядное |
_stat32i64 , _wstat32i64 |
Не затрагивается определением макроса | 32-разрядное | 64-разрядное |
_stat64i32 , _wstat64i32 |
Не затрагивается определением макроса | 64-разрядное | 32-разрядное |
Сопоставления подпрограмм универсального текста
TCHAR.H рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tstat |
_stat |
_stat |
_wstat |
_tstat64 |
_stat64 |
_stat64 |
_wstat64 |
_tstati64 |
_stati64 |
_stati64 |
_wstati64 |
_tstat32i64 |
_stat32i64 |
_stat32i64 |
_wstat32i64 |
_tstat64i32 |
_stat64i32 |
_stat64i32 |
_wstat64i32 |
Структура, определенная _stat
в SYS\STAT.H
, включает следующие поля.
Поле | Description |
---|---|
st_gid |
Числовой идентификатор группы, которой принадлежит файл (только для UNIX). В системах Windows это поле всегда равно нулю. Перенаправленный файл классифицируется как файл Windows. |
st_atime |
Время последнего доступа к файлу. Действительно на дисках, отформатированных в файловой системе NTFS, но не в FAT. |
st_ctime |
Время создания файла. Действительно на дисках, отформатированных в файловой системе NTFS, но не в FAT. |
st_dev |
Номер диска, содержащего файл (то же, что и st_rdev ). |
st_ino |
Номер узла информации ( inode ) для файла (только для UNIX). В файловых системах UNIX параметр inode описывает отметки даты и времени файла, разрешения и содержимое. Если файлы связаны жесткими ссылками друг с другом, они имеют один и тот же параметр inode . Параметр inode и, следовательно, параметр st_ino не имеют смысла в файловых системах FAT, HPFS и NTFS. |
st_mode |
Битовая маска для информации о файловом режиме. Бит _S_IFDIR устанавливается, если параметр path задает каталог; бит _S_IFREG устанавливается, если параметр path задает обычный файл или устройство. Пользовательские биты чтения/записи устанавливаются в соответствии с режимом разрешений файла; пользовательские биты выполнения устанавливаются согласно расширению имени файла. |
st_mtime |
Время последнего изменения файла. |
st_nlink |
Всегда имеет значение 1 в файловых системах, отличных от NTFS. |
st_rdev |
Номер диска, содержащего файл (то же, что и st_dev ). |
st_size |
Размер файла в байтах; 64-разрядное целое число для вариантов суффиксом i64 . |
st_uid |
Числовой идентификатор пользователя, который владеет файлом (только для UNIX). В системах Windows это поле всегда будет равно нулю. Перенаправленный файл классифицируется как файл Windows. |
Если параметр path
ссылается на устройство, поле st_size
, различные поля времени, поля st_dev
и st_rdev
в структуре _stat
не имеют смысла. Так как STAT.H
использует тип, определенный _dev_t
в TYPES.H
коде, необходимо включить TYPES.H
в STAT.H
код.
Требования
Маршрут | Обязательный заголовок | Необязательные заголовки |
---|---|---|
_stat , , _stat32 _stati64 _stat64 _stat32i64 ,_stat64i32 |
<sys/types.h> , затем <sys/stat.h> |
<errno.h> |
_wstat , , _wstat32 _wstati64 _wstat64 _wstat32i64 ,_wstat64i32 |
<sys/types.h> <sys/stat.h> за которым следует или<wchar.h> |
<errno.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_stat.c
// This program uses the _stat function to
// report information about the file named crt_stat.c.
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main( void )
{
struct _stat buf;
int result;
char timebuf[26];
char* filename = "crt_stat.c";
errno_t err;
// Get data associated with "crt_stat.c":
result = _stat( filename, &buf );
// Check if statistics are valid:
if( result != 0 )
{
perror( "Problem getting information" );
switch (errno)
{
case ENOENT:
printf("File %s not found.\n", filename);
break;
case EINVAL:
printf("Invalid parameter to _stat.\n");
break;
default:
/* Should never be reached. */
printf("Unexpected error in _stat.\n");
}
}
else
{
// Output some of the statistics:
printf( "File size : %ld\n", buf.st_size );
printf( "Drive : %c:\n", buf.st_dev + 'A' );
err = ctime_s(timebuf, 26, &buf.st_mtime);
if (err)
{
printf("Invalid arguments to ctime_s.");
exit(1);
}
printf( "Time modified : %s", timebuf );
}
}
File size : 732
Drive : C:
Time modified : Thu Feb 07 14:39:36 2002
См. также
Обработка файлов
_access
, _waccess
_fstat
, , _fstat32
_fstati64
_fstat64
_fstat32i64
,_fstat64i32
_getmbcp
_setmbcp