Поделиться через


_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