предоставляет информацию о файле
x = fileinfo(filesPaths) [x,ierr] = fileinfo(filesPaths)
вектор или матрица путей (в виде текста). Файлы могут быть любого типа: обычные файлы, директории (внутри собственные директории), ярлыки, символьные ссылки, и т.д.
матрицы или десятичные целые числа размером (m,13), где m: число
указанных путей файлов. Строка №i возвращает информацию о файле
filesPaths(i)
.
Если запрошен единственный путь, а файла не существует, то x
возвращается в виде [].
Если запрошено несколько файлов: когда файла среди них не существует, то функция
возвращает x
, в котором строка заполнена значениями Nan
.
столбец x | Описание |
---|---|
1 : | фактический размер файла (байты). 0 для директории. |
2 : | права файла (см. описание) |
3 : | идентификатор собственника файла (всегда 0 в Windows) |
4 : | идентификатор группы файла (всегда 0 в Windows) |
5 : | номер устройства |
6 : | временная метка UNIX последней модификации данных.
getdate(x(:,6))(:,[1 2 6 7 8 9]) возвращает
соответствующую дату в виде матрицы из числовых строк [год месяц день час мин сек]. |
7 : | временная метка UNIX последнего изменения статуса файла. |
8 : | временная метка UNIX последнего доступа к файлу. |
9 : | Тип устройства (если узловое устройство). |
10 : | Размер блока файловой системы ввода-вывода (всегда 0 в Windows) |
11 : | Количество блоков распределённых по этому хранилищу файлов (всегда 0 в Windows) |
12 : | индексный дескриптор файла (уникальный идентификатор) (всегда 0 в Windows) |
13 : | Количество жёстких ссылок, указывающих на этот файл (всегда 1 в Windows). |
указатель ошибки, 0, если ошибки не произошло.
Эта функция является интерфейсом к C-функции stat
.
Права обычно определяются в виде восьмеричных чисел: используйте
для преобразования dec2oct(x(2))
.
Числовой режим представляет собой от одной до четырёх восьмеричных цифр (0-7), полученных добавлением битов со значениями 4, 2 и 1. Любые опущенные цифры предполагаются предварёнными нулями. Первая цифра выбирает набор атрибутов идентификатора пользователя (4), группы пользователя (2) и sticky-бита (1). Вторая цифра выбирает права пользователя, который владеет файлом: чтение (4), запись (2) и исполнение (1); третье число выбирает права для других пользователей в группе файлов с теми же самыми значениями.
Таким образом, чтобы проверить права, необходимо использовать маски.
Например, в восьмеричной системе x
(2)=1664
,
таким образом первый элемент соответствует атрибуту sticky-бита (защита
от удаления и переименования). Второй указывает на то, что владелец
файла имеет право на запись и чтение. То же самое и для других пользователей
в группе файла. Наконец, другие пользователи имеют право лишь на чтение.
Использовать маску проще, чем смотреть на эти восьмеричные коды в
двоичном виде. Таким образом: x
(2)= 1 110 110 100
.
Чтобы проверить имеет ли пользователь право на запись, нужно посмотреть
на вторую тройку: 110
и сравнить её с правом на запись
010
. Таким образом, операция заключается в
110 000 000
& 010 000 000
.
Если результат отличен от нуля (как в данном случае), то пользователь
имеет право на запись.
w = fileinfo(SCI+'/etc/scilab.start') // права на файл dec2oct(w(2)) // дата файла : [год месяц день час мин сек .сек] getdate(w(6))(:,[1 2 6:10]) // Проверка прав на запись w = fileinfo(SCI+'/etc/scilab.start') S_IWRITE = 128; // маска прав на запись S_IEXEC = 64; // маска прав на исполнение S_IREAD = 256; // маска прав на чтение S_IFCHR = 8192; // маска прав директории if ( bitand( w(2), S_IWRITE ) <> 0) then disp('Для этого файла есть ПРАВО НА ЗАПИСЬ.'); else disp('Для этого файла НЕТ ПРАВА НА ЗАПИСЬ.'); end FILES = [SCI;SCIHOME;'несуществующий_файл';TMPDIR] [X,ERRS] = fileinfo(FILES) | ![]() | ![]() |
Version | Description |
6.0.0 | Теперь могут быть обработаны несколько путей файлов. |