В операционных системах microsoft windows существуют атрибута ов файла

Файл – это ключевой элемент каждой операционной системы. Пользователи и разработчики обязательно знакомятся с ним во время работы за компьютером.

В данной статье будет рассказано о свойствах файлов, а также раскрыты основные принципы использования соответствующего компонента. Информация пригодится как рядовым пользователям, так и начинающим системным администраторам.

Определение

Файл – именованная область данных на информационном носителе. Используется в виде базового объекта взаимодействия с электронными материалами в операционных системах.

Работа с подобными «документами» реализовывается через файловые системы. Они отвечают за организацию работы и абстракцию над носителями данных. В зависимости от файловой системы ОС будет меняться принцип реализации «документации». Обычно выделяют несколько видов файлов:

  • исполняемые (самостоятельные программы);
  • документы данных (текстовые, медиа и так далее).

Соответствующий элемент обладает набором индивидуальных свойств. Они помогают добиться уникальности. В зависимости от формата файла набор параметров меняется. О них необходимо знать каждому пользователю.

Формат – это способ организации информации внутри электронного документа. Позволяет записывать новые сведения в соответствие с заложенным смыслом, а затем интерпретировать имеющиеся материалы.

Свойства

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

  • имя;
  • тип файла (расширение имени);
  • время;
  • атрибуты;
  • размер;
  • владелец;
  • права доступа.

Это – основные свойства файла и папок в современных операционных системах. Далее каждый компонент будет рассмотрен подробно. После представлены основные операции со свойствами.

Имя

Имя – это название документа. То, на что обращается внимание в первую очередь. Можно назвать соответствующее свойство своеобразным идентификатором файла в операционной системе.

Имена можно задавать и переименовывать. На это способны:

  • сами операционные системы;
  • пользователи и администраторы;
  • используемые приложения.

Файл может иметь в имени разное количество символов. Этот момент зависит от типа файловой системы в ОС. Пример – в NTFS (стандартный вариант для Windows) допускается название документов длиной до 256 символов. В FAT – до 8 знаков на имя + 3 на расширение.

Не все символы ОС можно использоваться в именах документов. Все зависит от установленной операционной системы. В Windows нельзя при присваивании названия применять знаки:

  • больше/меньше;
  • слеши;
  • «звездочку»;
  • вопросительный знак;
  • двоеточие;
  • кавычки-галочки;
  • «палку» (вертикальную прямую).

В одном каталоге или папке Windows не даст создать два файла с одинаковыми именами, если у них будет идентичное расширение. Название документа – всегда уникальная запись.

Расширение

Присутствует в имени файла. Пишется через точку. Windows по умолчанию скрывает соответствующий компонент. Его необходимо просматривать в меню «Свойства» у выбранного электронного документа.

Расширение помогает определить содержание файла (формат), а также определить программы и приложение, которые будут работать с ним. Пример — .docx. Он придуман для MS Word.

Расширение сообщает носителю информации о том, какие данные он содержит. Вот самые распространенные варианты:

  • pdf – для электронных документов;
  • xlsx – таблицы, которые поддерживаются Excel;
  • doc/docx – текстовые документы Word;
  • exe – исполняемый файл для операционной системы;
  • gif – анимация/веб-графика;
  • jpg и .png – графические документы, которые могут быть открыты браузерами и «мастерами просмотра»;
  • mp3 – музыка, аудиофайлы;
  • mp4/mpeg-4 – хранение и создание видео/музыки на компьютерах и мобильных устройствах;
  • rar и .zip – архивы, помогающие сжимать большой объем информации;
  • html – документы веб-страниц, которые могут быть открыты любым интернет-обозревателем.

Это – не исчерпывающий список доступных форматов (расширений) современных операционных систем.

Размер

Файл как объект занимает то или иное пространство в памяти используемого устройства. Соответствующее свойство будет определяться размером.

Измеряется в байтах, битах, килобайтах, мегабайтах, гигабайтах. Сейчас на компьютерах встречаются терабайты и петабайты. Суперкомпьютеры могут работать с эксабайтами, зеттабайтами и йоттабайтами.

Время

Расположенный в том или ином месте операционной системы файл создается в определенный момент. Об этом нужно сообщить и ОС, и пользователю. Для данной затеи было придумано свойство под названием «время».

Каждый документ будет иметь:

  • время создания;
  • момент внесения изменений;
  • время последнего открытия.

Соответствующий параметр может быть полезен, когда нужно посмотреть последние используемые на устройстве документы. Или выяснить, в какой момент конкретный файл был изменен/открыт/создан.

Атрибуты

Изучая свойства файлов в операционных системах, нужно обратить внимание на атрибуты. Это – общие описания, которые возможно корректировать при необходимости. Находится свойство в двух состояниях: атрибуты включены и выключены.

Windows использует несколько ключевых атрибутов:

  1. Только чтение. Главный гарант безопасности системных файлов. При установке такого атрибута файл будет открыт на чтение. Внесение изменений в него не предусматривается операционной системой.
  2. Скрытый. С помощью этого варианта можно скрыть файл в «Проводнике». Система не будет отображать документ, если не активировать специальных режим просмотра.
  3. Архивный. Система устанавливает его автоматически. Нужен для определения изменений с момента последнего резервного копирования файлов.
  4. Системный. Атрибут, в котором указано, что файл является важным для системы. Так помечаются документы, необходимые для нормального функционирования ОС.

Здесь стоит запомнить правило – изменению подлежат только атрибуты «Скрытый» и «Только для чтения». Дополнительные свойства соответствующего раздела можно открыть с помощью кнопки «Другие».

Режим доступа

Носит название «право доступа». Свойство, обладающее возможность ограничивать «путь» к тому или иному файлу в пределах операционной системы. Отображается в разделе «Безопасность». Там же можно изменить права для пользователей и отдельных групп.

Владелец

Это – создатель объекта. Пользователи, которым назначены права администратора. Они могут ударять и изменять соответствующие файлы тем или иным образом.

Владельца просто так не поменять. Данное свойство доступно для корректировки только системными администраторами.

Работа со свойствами

Со свойствами файла можно выполнять различные действия. Это – простые операции, которые помогают управлять документами и производить необходимые настройки.

Просмотр

Чтобы посмотреть свойства интересующего документа в системе, нужно:

  1. Открыть «Проводник».
  2. Найти желаемый файл. Именно здесь пригодится свойство под названием «имя». Оно помогает быстро обнаружить, существует ли файл в системе.
  3. Нажать ПКМ по документации.
  4. Выбрать в появившемся меню раздел «Свойства».

На экране появится окно с интересующей информацией. Оно предусматривает несколько вкладок.

Окно «Свойства»

Когда окно «Свойства файла или папки» открыто, можно получить о документе всю интересующую и актуальную информацию. Это – отдельное диалоговое «меню». Количество вкладок будет меняться в зависимости от того, какие требования выдвинуты к содержимому файла (формата).

Стоит рассмотреть наглядный пример – с pdf-документом. В разделе «Общие» здесь будет отображаться:

  1. Тип файла в системе и его расширение.
  2. Приложение. Это – программа, которая будет запускаться при открытии файла выбранного расширения. Устанавливается системой при наличии соответствующего приложения автоматически. Может быть изменена при помощи нажатия на кнопку «Изменить…».
  3. Расположение. Это – путь доступа к файлам. По соответствующему адресу можно обнаружить интересующий файл в системе. Представлено расположение в виде ссылок с названием диска, а также папок, в которые вложен документ. Пример – c:/Windows/system23/etc.txt.
  4. Размер. Объем, занимаемый файлом в системе.
  5. Создан. Это – непосредственная дата создания.
  6. Изменен. Отвечает за отображение информации о том, когда пользователь последний раз вносил те или иные корректировки.
  7. Открыт. Дата последнего открытия.
  8. Атрибуты. Отмечены те или иные «параметры».

Также можно посмотреть раздел «Общие». Он встречается и у графических документов, а также мультимедиа. Здесь находится подробное описание документации. Операционной системе соответствующая информация не пригодится – она важна пользователю.

Пример – музыка. В разделе «Подробно» обычно отображается жанр и исполнитель, название трека и альбома, дата записи, авторские права. У изображений – теги, комментарии, дата съемки и приобретения, код изображения, информация о камере, размеры и иные особенности.

Изменение

Свойства файла можно при необходимости поменять. Для этого потребуется:

  1. Перейти в раздел «Подробно».
  2. Открыть интересующий пункт. Меню будет зависеть от расширения документации.
  3. Внести корректировки. Пример – выбрать из доступного меню или напечатать при помощи клавиатуры.
  4. Кликнуть по кнопке «Применить» или «Ок».

В случае с разрешением доступа потребуется нажать на кнопку «Настроить права…», выбрать особенности доступа для пользователей и их групп, а затем сохранить изменения.

Не все свойства можно изменять. Иногда это происходит автоматически, в некоторых ситуациях – под действием тех или иных приложений. Какие-то параметры документации в операционных системах остаются неизменными. Пример – даты создания.

Удаление

Некоторые параметры можно удалять. Этот момент напрямую зависит от типа файла в операционной системе. Пример – в текстовых документах в подробных параметрах «Авторы» — это корректируемое поле. Там может быть внесена желаемая запись. Ее же разрешено изменить или удалить.

Чтобы избавиться от личных сведений в свойствах, нужно кликнуть по ссылке «Удаление свойств и личной информации». Элемент управления находится в нижней части вкладки «Подробно». Далее предстоит выбрать операцию и подтвердить ее.

Как создать файл

Основы работы со свойствами файлов рассмотрены. Теперь стоит разобраться в том, как создать документ. Windows предусматривает два быстрых подхода:

  • при помощи контекстного меню;
  • через программу.

В первом случае потребуется:

  1. Перейти в корневой каталог. Туда, где хочется разместить документ.
  2. Кликнуть ПКМ по свободному пространству.
  3. Навести курсор на строчку «Создать».
  4. Выбрать тип электронного документа.

Теперь остается задать уникальное имя. Файл создан. У него сразу появились некоторые свойства.

Можно создать документ в операционной системе через специализированную программу. Она зависит от того, с каким именно файлом хочется работать. Пример — .txt. Для этого используется «Блокнот». Нужно открыть его, а затем в контекстном меню выбрать «Файл»-«Сохранить» или «Сохранить как…».

Система предложить задать имя и формат сохраняемого документа, а также указать путь к нему на диске. После подтверждения операции в заданном месте появится соответствующий файл.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

2024-12-03

Введение

В Windows API (WinAPI) существует множество функций для работы с файлами и каталогами. Ниже приведены некоторые из наиболее распространенных файловых операций, которые можно выполнить с использованием WinAPI в языке программирования C/C++.

  1. Создание файла:
    • CreateFile: Эта функция позволяет создавать новые файлы или открывать существующие. Она также позволяет указать параметры доступа, атрибуты и так далее.
  2. Чтение файла:
    • ReadFile: Для чтения данных из файла в буфер.
    • SetFilePointer и SetFilePointerEx: Установка указателя файла для чтения с определенной позиции.
  3. Запись в файл:
    • WriteFile: Для записи данных в файл.
    • SetEndOfFile: Установка размера файла.
  4. Удаление файла:
    • DeleteFile: Для удаления файла.
  5. Переименование и перемещение файла:
    • MoveFile и MoveFileEx: Переименование или перемещение файла или каталога.
  6. Работа с атрибутами файла:
    • GetFileAttributes и GetFileAttributesEx: Получение атрибутов файла.
    • SetFileAttributes: Установка атрибутов файла.
  7. Проверка существования файла:
    • FileExists: Проверка существования файла с использованием FindFirstFile и FindNextFile.
  8. Работа с каталогами:
    • CreateDirectory и CreateDirectoryEx: Создание каталогов.
    • RemoveDirectory: Удаление каталогов.
  9. Получение информации о файле:
    • GetFileInformationByHandle: Получение информации о файле, такой как размер, дата создания и т. д.
  10. Закрытие файла:
    • CloseHandle: Закрытие открытого файла или дескриптора каталога.

Пример кода на C/C++ для открытия файла, чтения из него и закрытия файла с использованием WinAPI:

#include <windows.h>
#include "iostream"

int main() {
    SetConsoleOutputCP(1251);
    // Открыть файл для чтения
    HANDLE hFile = CreateFile("example.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        // Чтение данных из файла
        char buffer[1024];
        DWORD bytesRead;
        if (ReadFile(hFile, buffer, sizeof(buffer), &bytesRead, NULL)) {
            // Обработка данных
        }

        // Закрыть файл
        CloseHandle(hFile);
    } else {
        // Обработка ошибки открытия файла
        std::cout << "Не удалось открыть файл" << std::endl;
    }

    return 0;
}

Создание файла

Создание файла в Windows с использованием WinAPI можно выполнить с помощью функции CreateFile. Вот пример на языке C++, который демонстрирует, как создать новый файл:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    // Открыть или создать файл для записи
    HANDLE hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        // Файл успешно создан
        std::cout << "Файл '" << fileName << "' успешно создан." << std::endl;

        // Закрыть файл
        CloseHandle(hFile);
    } else {
        // Обработать ошибку
        DWORD error = GetLastError();
        if (error == ERROR_FILE_EXISTS) {
            std::cout << "Файл '" << fileName << "' уже существует." << std::endl;
        } else {
            std::cerr << "Не удалось создать файл '" << fileName << "'. Ошибка " << error << std::endl;
        }
    }

    return 0;
}

В этом примере:

  • LPCSTR fileName — это строка, представляющая путь и имя файла. Замените его на желаемый путь и имя файла.
  • CreateFile используется для создания файла с заданными параметрами. В данном случае, мы используем CREATE_NEW, чтобы создать новый файл только в том случае, если он не существует.
  • Если файл успешно создан, мы выводим сообщение об успехе и затем закрываем файл с помощью CloseHandle.
  • Если файл уже существует или возникает другая ошибка, мы выводим соответствующее сообщение.

Функция CreateFile в Windows API имеет множество параметров, которые позволяют настроить операцию создания или открытия файла подробно. Вот общий вид прототипа функции CreateFile:

HANDLE CreateFile(
  LPCTSTR               lpFileName,
  DWORD                 dwDesiredAccess,
  DWORD                 dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD                 dwCreationDisposition,
  DWORD                 dwFlagsAndAttributes,
  HANDLE                hTemplateFile
);

Давайте рассмотрим каждый параметр более подробно:

  1. lpFileName (LPCTSTR):
    • Этот параметр представляет собой путь к файлу или устройству. Он может быть строкой в формате многобайтовых символов (ANSI) или широких символов (Unicode), в зависимости от того, какой тип используется: LPCSTR для ANSI или LPCWSTR для Unicode.
    • Примеры:
      • ANSI: "C:\\example.txt"
      • Unicode: L"C:\\example.txt"
  2. dwDesiredAccess (DWORD):
    • Определяет режим доступа к файлу. Это флаги, которые указывают, какие операции можно выполнять с файлом. Например:
      • GENERIC_READ: Разрешает чтение файла.
      • GENERIC_WRITE: Разрешает запись в файл.
    • Вы можете комбинировать флаги с помощью операции побитового ИЛИ (|) для указания нескольких прав доступа.
  3. dwShareMode (DWORD):
    • Определяет режим совместного доступа к файлу. Это флаги, указывающие, какие типы доступа можно разрешить другим процессам. Например:
      • FILE_SHARE_READ: Разрешает другим процессам читать файл.
      • FILE_SHARE_WRITE: Разрешает другим процессам записывать в файл.
  4. lpSecurityAttributes (LPSECURITY_ATTRIBUTES):
    • Этот параметр позволяет указать атрибуты безопасности для создаваемого файла. Если вы не хотите задавать специальные атрибуты безопасности, можете передать NULL.
  5. dwCreationDisposition (DWORD):
    • Определяет, что делать, если файл уже существует или не существует. Некоторые из возможных значений:
      • CREATE_NEW: Создать новый файл (ошибка, если файл уже существует).
      • CREATE_ALWAYS: Создать новый файл или перезаписать существующий.
      • OPEN_EXISTING: Открыть только существующий файл.
      • OPEN_ALWAYS: Открыть существующий файл или создать новый, если его нет.
  6. dwFlagsAndAttributes (DWORD):
    • Этот параметр позволяет указать дополнительные атрибуты файла. Например:
      • FILE_ATTRIBUTE_NORMAL: Обычный файл без специальных атрибутов.
      • FILE_ATTRIBUTE_READONLY: Файл только для чтения.
  7. hTemplateFile (HANDLE):
    • Этот параметр представляет собой дескриптор файла-шаблона, который используется для определения атрибутов и флагов создаваемого файла. Обычно передается как NULL.

После вызова функции CreateFile, она возвращает дескриптор файла (или специальное значение INVALID_HANDLE_VALUE в случае ошибки). Этот дескриптор файла используется для дальнейших операций с файлом, таких как чтение, запись и закрытие.

Это основные параметры функции CreateFile, но WinAPI предоставляет ещё больше опций для более сложных сценариев работы с файлами, такие как сжатие, шифрование и работа с устройствами. Вам следует обращаться к официальной документации Microsoft для получения более подробной информации и примеров использования этой функции: https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea

Чтение файла

Чтение файла в Windows с использованием WinAPI выполняется с помощью функции ReadFile. Эта функция позволяет считывать данные из файла в буфер. Вот пример на языке C++, который демонстрирует, как читать данные из файла:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    // Открыть файл для чтения
    HANDLE hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        char buffer[1024];
        DWORD bytesRead;

        if (ReadFile(hFile, buffer, sizeof(buffer), &bytesRead, NULL)) {
            // Чтение прошло успешно
            if (bytesRead > 0) {
                // Вывести прочитанные данные на экран
                std::cout << "Прочитано " << bytesRead << " байт: " << buffer << std::endl;
            } else {
                std::cout << "Файл пуст." << std::endl;
            }
        } else {
            // Обработать ошибку чтения
            DWORD error = GetLastError();
            std::cerr << "Ошибка чтения файла. Код ошибки: " << error << std::endl;
        }

        // Закрыть файл
        CloseHandle(hFile);
    } else {
        // Обработать ошибку открытия файла
        DWORD error = GetLastError();
        std::cerr << "Не удалось открыть файл. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере:

  • LPCSTR fileName — это строка, представляющая путь и имя файла. Замените его на желаемый путь и имя файла.
  • Мы используем CreateFile для открытия файла для чтения с флагом GENERIC_READ.
  • Затем мы используем ReadFile для чтения данных из файла в буфер buffer.
  • Если чтение прошло успешно, мы выводим прочитанные данные на экран.
  • Если возникла ошибка чтения, мы выводим сообщение об ошибке с кодом ошибки.
  • Наконец, мы закрываем файл с помощью CloseHandle.

Функция ReadFile в Windows API используется для чтения данных из файла. Вот её прототип:

BOOL ReadFile(
  HANDLE       hFile,
  LPVOID       lpBuffer,
  DWORD        nNumberOfBytesToRead,
  LPDWORD      lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);

Давайте подробно рассмотрим каждый из параметров:

  1. hFile (HANDLE):
    • Это дескриптор файла, который был получен при открытии файла с помощью функции CreateFile. Он указывает на файл, из которого будут читаться данные.
  2. lpBuffer (LPVOID):
    • Это указатель на буфер, в который будут считываться данные из файла. Этот буфер должен быть предварительно выделен, и его размер должен быть не меньше, чем nNumberOfBytesToRead, чтобы вместить считанные данные.
  3. nNumberOfBytesToRead (DWORD):
    • Этот параметр указывает количество байт, которые нужно прочитать из файла и поместить в буфер lpBuffer.
  4. lpNumberOfBytesRead (LPDWORD):
    • Это указатель на переменную, в которую будет записано фактическое количество байт, которые были прочитаны из файла. Эта информация может быть полезной, чтобы узнать, сколько данных было считано.
  5. lpOverlapped (LPOVERLAPPED):
    • Этот параметр используется для асинхронного чтения файлов и обычно оставляется равным NULL для синхронного чтения. Если вы хотите выполнять асинхронное чтение, вы можете создать структуру OVERLAPPED и передать указатель на неё.

После вызова функции ReadFile, она возвращает TRUE, если чтение было успешным, и FALSE, если произошла ошибка. Если чтение было успешным, данные будут доступны в буфере lpBuffer, и количество считанных байт будет записано в переменную, на которую указывает lpNumberOfBytesRead.

Запись в файл

Запись данных в файл в Windows с использованием WinAPI выполняется с помощью функции WriteFile. Эта функция позволяет записать данные из буфера в файл. Вот её прототип:

BOOL WriteFile(
  HANDLE       hFile,
  LPCVOID      lpBuffer,
  DWORD        nNumberOfBytesToWrite,
  LPDWORD      lpNumberOfBytesWritten,
  LPOVERLAPPED lpOverlapped
);

Давайте подробно рассмотрим каждый из параметров:

  1. hFile (HANDLE):
    • Это дескриптор файла, который был получен при открытии файла с помощью функции CreateFile. Он указывает на файл, в который будут записываться данные.
  2. lpBuffer (LPCVOID):
    • Это указатель на буфер, из которого будут записываться данные в файл. Этот буфер должен содержать данные, которые вы хотите записать.
  3. nNumberOfBytesToWrite (DWORD):
    • Этот параметр указывает количество байт, которые нужно записать в файл из буфера lpBuffer.
  4. lpNumberOfBytesWritten (LPDWORD):
    • Это указатель на переменную, в которую будет записано фактическое количество байт, которые были успешно записаны в файл. Эта информация может быть полезной, чтобы узнать, сколько данных было записано.
  5. lpOverlapped (LPOVERLAPPED):
    • Этот параметр используется для асинхронной записи файлов и обычно оставляется равным NULL для синхронной записи. Если вы хотите выполнять асинхронную запись, вы можете создать структуру OVERLAPPED и передать указатель на неё.

После вызова функции WriteFile, она возвращает TRUE, если запись была успешной, и FALSE, если произошла ошибка. Если запись была успешной, количество фактически записанных байт будет записано в переменную, на которую указывает lpNumberOfBytesWritten.

Вот пример использования функции WriteFile для записи данных в файл:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    // Открыть файл для записи
    HANDLE hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        const char *data = "Пример записи в файл.";
        DWORD bytesWritten;

        if (WriteFile(hFile, data, strlen(data), &bytesWritten, NULL)) {
            // Запись прошла успешно
            std::cout << "Записано " << bytesWritten << " байт." << std::endl;
        } else {
            // Обработать ошибку записи
            DWORD error = GetLastError();
            std::cerr << "Ошибка записи в файл. Код ошибки: " << error << std::endl;
        }

        // Закрыть файл
        CloseHandle(hFile);
    } else {
        // Обработать ошибку открытия файла
        DWORD error = GetLastError();
        std::cerr << "Не удалось открыть/создать файл. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере мы открываем файл для записи с помощью CreateFile, затем используем WriteFile для записи данных в файл и, наконец, закрываем файл с помощью CloseHandle. После успешной записи мы выводим количество записанных байт.

Удаление файла

Для удаления файла в Windows с использованием WinAPI вы можете использовать функцию DeleteFile. Вот её прототип:

BOOL DeleteFile(
  LPCTSTR lpFileName
);

Давайте рассмотрим параметр этой функции:

  1. lpFileName (LPCTSTR):
    • Этот параметр представляет собой строку, содержащую путь к файлу, который вы хотите удалить. Обычно это Unicode-строка, представленная как LPCWSTR для широких символов или LPCTSTR для многобайтовых символов.

Пример использования функции DeleteFile для удаления файла:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    if (DeleteFile(fileName)) {
        std::cout << "Файл '" << fileName << "' успешно удалён." << std::endl;
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось удалить файл '" << fileName << "'. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере:

  • LPCSTR fileName — это строка, представляющая путь и имя файла, который вы хотите удалить. Замените его на путь и имя вашего файла.
  • Мы вызываем DeleteFile с указанием имени файла для удаления.
  • Если файл успешно удалён, мы выводим сообщение об успехе.
  • Если удаление не удалось, мы выводим сообщение об ошибке с кодом ошибки.

Переименование и перемещение

Для переименования и перемещения файла в Windows с использованием WinAPI, вы можете воспользоваться функцией MoveFile или её вариациями. Вот примеры использования:

Переименование файла:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR oldFileName = "C:\\путь\\к\\старому\\файлу\\old_file.txt"; // Замените старый путь и имя файла
    LPCSTR newFileName = "C:\\путь\\к\\новому\\файлу\\new_file.txt"; // Замените новый путь и имя файла

    if (MoveFile(oldFileName, newFileName)) {
        std::cout << "Файл успешно переименован в '" << newFileName << "'." << std::endl;
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось переименовать файл. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере:

  • Мы используем функцию MoveFile для переименования файла или перемещения его в новое место.
  • Если операция прошла успешно, выводится сообщение об успехе.
  • Если операция не удалась, выводится сообщение об ошибке с кодом ошибки.

Работа с атрибутами файла

Вы можете управлять атрибутами файла в Windows с использованием WinAPI с помощью функций GetFileAttributes и SetFileAttributes. Вот примеры работы с атрибутами файла:

Получение атрибутов файла:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    DWORD fileAttributes = GetFileAttributes(fileName);

    if (fileAttributes != INVALID_FILE_ATTRIBUTES) {
        if (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
            std::cout << "Файл '" << fileName << "' - это каталог." << std::endl;
        } else {
            std::cout << "Файл '" << fileName << "' - это обычный файл." << std::endl;
        }

        if (fileAttributes & FILE_ATTRIBUTE_READONLY) {
            std::cout << "Файл '" << fileName << "' доступен только для чтения." << std::endl;
        }
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось получить атрибуты файла. Код ошибки: " << error << std::endl;
    }

    return 0;
}

Установка атрибутов файла:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    // Получить текущие атрибуты файла
    DWORD fileAttributes = GetFileAttributes(fileName);

    if (fileAttributes != INVALID_FILE_ATTRIBUTES) {
        // Установить новые атрибуты (например, сделать файл доступным только для чтения)
        fileAttributes |= FILE_ATTRIBUTE_READONLY;

        if (SetFileAttributes(fileName, fileAttributes)) {
            std::cout << "Атрибуты файла '" << fileName << "' успешно изменены." << std::endl;
        } else {
            DWORD error = GetLastError();
            std::cerr << "Не удалось изменить атрибуты файла. Код ошибки: " << error << std::endl;
        }
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось получить атрибуты файла. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В обоих примерах:

  • Мы используем функцию GetFileAttributes, чтобы получить текущие атрибуты файла.
  • Затем мы можем изменить атрибуты файла, если это необходимо, например, сделать файл доступным только для чтения с помощью бита FILE_ATTRIBUTE_READONLY.
  • Для изменения атрибутов файла мы используем функцию SetFileAttributes.

Помните, что некоторые атрибуты, такие как FILE_ATTRIBUTE_SYSTEM, могут быть изменены только с административными правами. Убедитесь, что ваше приложение имеет соответствующие права доступа к файлу перед изменением его атрибутов.

Проверка существования файла

Для проверки существования файла в Windows с использованием WinAPI вы можете воспользоваться функцией PathFileExists из библиотеки Shlwapi.h или функцией GetFileAttributes и проверкой возвращаемого значения. Вот примеры:

Используя PathFileExists:

Для компиляции примера в Code::Blocks нужно подключить библиотеку в настройках компилятора:

  1. Project -> Build options -> Linker settings -> Add

  2. Добавить “shlwapi”.

#include <windows.h>
#include <Shlwapi.h> // Для PathFileExists

int main() {
    SetConsoleOutputCP(1251);
    PCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    if (PathFileExists(fileName)) {
        // Файл существует
        printf("Файл '%s' существует.\n", fileName);
    } else {
        // Файл не существует
        printf("Файл '%s' не существует.\n", fileName);
    }

    return 0;
}

Используя GetFileAttributes:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    DWORD fileAttributes = GetFileAttributes(fileName);

    if (fileAttributes != INVALID_FILE_ATTRIBUTES && !(fileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
        // Файл существует
        std::cout << "Файл '" << fileName << "' существует." << std::endl;
    } else {
        // Файл не существует или это каталог
        std::cout << "Файл '" << fileName << "' не существует или это каталог." << std::endl;
    }

    return 0;
}

Оба примера позволяют вам проверить существование файла. Первый пример использует функцию PathFileExists, которая является более простой и интуитивно понятной для этой задачи. Второй пример использует GetFileAttributes и проверяет атрибуты файла, чтобы определить его существование. Вы можете выбрать подходящий для вас метод.

Поиск файлов

Для поиска файлов в Windows с использованием WinAPI, вы можете воспользоваться функцией FindFirstFile и её итеративной версией FindNextFile. Эти функции позволяют вам искать файлы по определенным критериям в указанном каталоге. Вот пример поиска файлов:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR searchPath = "C:\\путь\\к\\каталогу\\*.*"; // Замените путь к каталогу по вашему усмотрению

    WIN32_FIND_DATA findFileData;
    HANDLE hFind = FindFirstFile(searchPath, &findFileData);

    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
                // Элемент найден, и это не каталог
                std::cout << "Имя файла: " << findFileData.cFileName << std::endl;
            }
        } while (FindNextFile(hFind, &findFileData) != 0);

        FindClose(hFind); // Закрыть дескриптор поиска
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось выполнить поиск файлов. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере:

  • Мы указываем путь к каталогу и шаблон имени файлов в searchPath. Например, "C:\\путь\\к\\каталогу\\*.*" будет искать все файлы в указанном каталоге.

  • Мы используем FindFirstFile для начала поиска файлов. Функция возвращает дескриптор поиска (типа HANDLE).

  • Затем мы используем цикл do-while с FindNextFile для итеративного поиска следующих файлов в каталоге. Функция FindNextFile возвращает 0, когда больше файлов для поиска нет.

  • В цикле мы проверяем атрибуты найденных элементов, и если элемент не является каталогом (FILE_ATTRIBUTE_DIRECTORY не установлен), то выводим имя файла.

  • Наконец, мы закрываем дескриптор поиска с помощью FindClose.

Помните, что при использовании FindFirstFile и FindNextFile нужно следить за максимальной длиной пути и имени файла, чтобы избежать переполнения буфера. Если вам нужно выполнить более сложные запросы поиска, вы можете использовать FindFirstFileEx.

Работа с каталогами

Для работы с каталогами в Windows с использованием WinAPI вы можете использовать функции, такие как CreateDirectory, RemoveDirectory, SetCurrentDirectory, и GetCurrentDirectory. Вот примеры работы с каталогами:

Создание каталога:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR directoryName = "C:\\путь\\к\\новому\\каталогу"; // Замените путь и имя каталога по вашему усмотрению

    if (CreateDirectory(directoryName, NULL)) {
        std::cout << "Каталог '" << directoryName << "' успешно создан." << std::endl;
    } else {
        DWORD error = GetLastError();
        if (error == ERROR_ALREADY_EXISTS) {
            std::cerr << "Каталог '" << directoryName << "' уже существует." << std::endl;
        } else {
            std::cerr << "Не удалось создать каталог. Код ошибки: " << error << std::endl;
        }
    }

    return 0;
}

Удаление каталога:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR directoryName = "C:\\путь\\к\\каталогу\\для_удаления"; // Замените путь и имя каталога по вашему усмотрению

    if (RemoveDirectory(directoryName)) {
        std::cout << "Каталог '" << directoryName << "' успешно удалён." << std::endl;
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось удалить каталог. Код ошибки: " << error << std::endl;
    }

    return 0;
}

Установка текущего каталога:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR newDirectory = "C:\\путь\\к\\новому\\каталогу"; // Замените путь и имя каталога по вашему усмотрению

    if (SetCurrentDirectory(newDirectory)) {
        std::cout << "Текущий каталог установлен в '" << newDirectory << "'." << std::endl;
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось установить текущий каталог. Код ошибки: " << error << std::endl;
    }

    return 0;
}

Получение текущего каталога:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    CHAR currentDirectory[MAX_PATH];

    if (GetCurrentDirectory(MAX_PATH, currentDirectory) != 0) {
        std::cout << "Текущий каталог: " << currentDirectory << std::endl;
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось получить текущий каталог. Код ошибки: " << error << std::endl;
    }

    return 0;
}

Функции CreateDirectory и RemoveDirectory могут возвращать ошибку ERROR_ALREADY_EXISTS, если каталог уже существует.

Получение информации о файле

Функция GetFileInformationByHandle предоставляет информацию о файле на основе его дескриптора. Эта функция предоставляет подробные сведения о файле, такие как размер, атрибуты, времена создания и др. Вот пример использования функции GetFileInformationByHandle:

#include <windows.h>
#include <iostream>
#include <ctime>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    // Открыть файл для получения дескриптора
    HANDLE hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        BY_HANDLE_FILE_INFORMATION fileInfo;
        if (GetFileInformationByHandle(hFile, &fileInfo)) {
            std::cout << "Имя файла: " << fileName << std::endl;
            std::cout << "Размер файла: " << fileInfo.nFileSizeLow << " байт" << std::endl;
            std::cout << "Атрибуты файла: " << fileInfo.dwFileAttributes << std::endl;

            SYSTEMTIME sysTime;
            FileTimeToSystemTime(&fileInfo.ftCreationTime, &sysTime);
            std::cout << "Дата создания: " << sysTime.wDay << "." << sysTime.wMonth << "." << sysTime.wYear 
                << " " << sysTime.wHour << ":" << sysTime.wMinute << ":" << sysTime.wSecond << std::endl;

            FileTimeToSystemTime(&fileInfo.ftLastAccessTime, &sysTime);
            std::cout << "Последний доступ: " << sysTime.wDay << "." << sysTime.wMonth << "." << sysTime.wYear 
                << " " << sysTime.wHour << ":" << sysTime.wMinute << ":" << sysTime.wSecond << std::endl;

            FileTimeToSystemTime(&fileInfo.ftLastWriteTime, &sysTime);
            std::cout << "Последнее изменение: " << sysTime.wDay << "." << sysTime.wMonth << "." 
                << sysTime.wYear << " " << sysTime.wHour << ":" << sysTime.wMinute << ":" << sysTime.wSecond << std::endl;
        } else {
            DWORD error = GetLastError();
            std::cerr << "Не удалось получить информацию о файле. Код ошибки: " << error << std::endl;
        }

        // Закрыть дескриптор файла
        CloseHandle(hFile);
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось открыть файл. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере:

  1. Мы открываем файл с помощью функции CreateFile, чтобы получить дескриптор файла (hFile).

  2. Затем мы используем GetFileInformationByHandle, передавая ей дескриптор файла и указатель на структуру BY_HANDLE_FILE_INFORMATION, в которую будет записана информация о файле.

  3. Мы выводим полученную информацию о файле, такую как имя, размер, атрибуты и времена.

  4. После использования дескриптора файла мы его закрываем с помощью CloseHandle.

Обратите внимание, что GetFileInformationByHandle предоставляет более полную информацию о файле, чем GetFileAttributes или GetFileAttributesEx.

Закрытие файла

Для закрытия файла в Windows с использованием WinAPI, вы можете использовать функцию CloseHandle, передав в неё дескриптор файла, который был получен при его открытии с помощью функции CreateFile или других функций, возвращающих дескриптор файла. Вот пример закрытия файла:

#include <windows.h>
#include <iostream>

int main() {
    SetConsoleOutputCP(1251);
    LPCSTR fileName = "C:\\путь\\к\\вашему\\файлу\\example.txt"; // Замените путь и имя файла по вашему усмотрению

    // Открыть файл для чтения
    HANDLE hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        // Выполняйте операции с файлом

        // Закрыть дескриптор файла
        CloseHandle(hFile);
        std::cout << "Файл закрыт." << std::endl;
    } else {
        DWORD error = GetLastError();
        std::cerr << "Не удалось открыть файл. Код ошибки: " << error << std::endl;
    }

    return 0;
}

В этом примере:

  1. Мы открываем файл с помощью функции CreateFile, чтобы получить дескриптор файла (hFile).

  2. Затем выполняем операции с файлом, если это необходимо.

  3. После завершения работы с файлом мы закрываем дескриптор файла с помощью функции CloseHandle.

Закрытие дескриптора файла важно, чтобы освободить ресурсы и предотвратить утечку дескрипторов. Вы должны закрывать дескрипторы файлов после их использования.

Работа с различными системными объектами

Функция CreateFile в Windows может работать с различными типами объектов, такими как файлы, устройства, каталоги и т. д. Вот некоторые из типов объектов, с которыми CreateFile может работать:

  1. Файлы: Это наиболее распространенный тип объектов. Вы можете открывать и создавать обычные файлы разных форматов, такие как текстовые, бинарные, конфигурационные и т. д.

  2. Устройства: Функция CreateFile может быть использована для работы с системными устройствами, такими как диски, порты COM, принтеры, звуковые устройства и другие. Для этого необходимо указать путь к устройству, например, \\.\COM1 для открытия COM1 порта.

  3. Каталоги: С помощью CreateFile можно открывать каталоги и выполнять операции с их содержимым, такие как чтение и запись файлов внутри каталога.

  4. Специальные объекты: Это может включать объекты, такие как метки томов, события, мьютексы, семафоры и другие системные ресурсы. Для доступа к ним также используется CreateFile.

  5. Пайпы (каналы): Функция CreateFile может использоваться для открытия и взаимодействия с именованными и анонимными каналами, которые предоставляют механизмы межпроцессного взаимодействия (IPC).

  6. Mailslots: Mailslots — это еще один механизм IPC, и CreateFile может использоваться для создания или открытия именованных mailslots для передачи сообщений между процессами.

  7. Реестр: С помощью CreateFile можно работать с реестром Windows, например, открывать ключи реестра и выполнять операции с данными в них.

  8. Потоки ввода-вывода (I/O streams): CreateFile может быть использован для создания и открытия потоков ввода-вывода для работы с консольным вводом-выводом.

Важно отметить, что для каждого типа объекта существуют разные флаги и параметры, которые нужно указать при вызове CreateFile, чтобы правильно работать с этими объектами. Кроме того, различные типы объектов могут подразумевать разные операции ввода-вывода и методы взаимодействия.

Материал из энциклопедии Руниверсалис

Атрибут файла (англ. file attribute) — метаданные, которые описывают файл. Атрибут может находиться в двух состояниях: либо установленный, либо снятый. Атрибуты рассматриваются отдельно от других метаданных, таких как даты, расширения имени файла или права доступа. Каталоги и другие объекты файловой системы также могут иметь определённые атрибуты. Также существуют расширенные атрибуты файлов, хранящие данные другого типа.

Разновидности

DOS и Microsoft Windows

В операционных системах DOS и Microsoft Windows традиционно существуют четыре атрибута:[1][2][3]

  • Архивный (A): Когда этот атрибут установлен, это означает, что файл был изменён со времени проведения последнего резервного копирования. ПО, с помощью которого выполняется резервное копирование, также отвечает за снятие этого атрибута.
  • Скрытый (H): Файл с установленным атрибутом считается скрытым. Это означает, что команды MS-DOS (dir) и программы Windows (такие как Проводник) по умолчанию не будут отображать этот файл, если не включён специальный режим[4] .
  • Системный (S): Файл с установленным атрибутом считается системным — таким, существование которого в неизменённом виде критически важно для нормальной работы системы. По умолчанию команды MS-DOS (dir) и программы Windows (такие как Проводник) не будут отображать этот файл, если не включён специальный режим.
  • Только чтение (R): Установленный атрибут означает, что содержимое файла нельзя изменять. Как правило, программы для Windows игнорируют этот атрибут, если он установлен для каталогов[5].

С выходом новых версий системы Windows в NTFS появились многие дополнительные атрибуты, в числе которых следующие:

  • Сжатый (Compressed, C). Установленный атрибут означает, что Windows сохраняет этот файл на диске в сжатом виде.
  • Зашифрованный (Encrypted, E). Установленный атрибут означает, что Windows хранит этот файл на диске в зашифрованном виде.
  • Не Индексированный (Not Content-Indexed, I). Установленный атрибут означает, что файл не будет проиндексирован службой индексации содержимого или поиска Windows операционной системы.

4.4BSD-Lite и производные от неё системы

Эта статья или раздел содержит незавершённый перевод с иностранного языка.

Вы можете помочь проекту, закончив перевод. Если вы знаете, на каком языке написан фрагмент, укажите его в этом шаблоне.

В 4.4BSD и 4.4BSD-Lite файлы и каталоги могут получить четыре атрибута, которые устанавливаются владельцем файла или пользователем с повышенными правами (отмеченные как «User»). Еще два атрибута могут устанавливаться только пользователем с повышенными правами («System»).[6]

  • (User) No-dump: Установленный атрибут означает, что файл или каталог не должен копироваться во время резервного копирования.
  • (User and System) Immutable: Означает, что файл или каталог могут оставаться неизменными. Будут блокированы попытки открытия файла для записи, попытки переименовать его, переименовать или создать новый файл в каталоге.
  • (User and System) Append-only: К файлу можно только добавлять информацию.
  • (User) Opaque: Используется определённая особенность монтирования файловых систем в ОС.

В FreeBSD ещё появился следующий атрибут[7] (также поддерживается в DragonFly BSD):[8]:

  • (User and System) No-unlink: Означает, что файл или каталог нельзя удалять. Попытки сделать это закончатся сообщением про ошибку доступа.

FreeBSD также поддерживает:[7]

  • (System) No-archive: установленный атрибут означает, что файл или каталог нельзя архивировать (средствами файловой системы).
  • (System) Snapshot: Файл принадлежит к специальному типу файлов, обрабатываемых системой. Этот атрибут устанавливается только системой, даже пользователь с повышенными правами не может его изменить.

Кроме того, DragonFly BSD поддерживает:[8]

  • (User and System) No-history: История изменений не должна сохраняться для данного файла или каталога.
  • (User) Swapcache и (System) Swapcache: Определяет уверенные особенности работы с SSD.
  • (System) Archived: Противоположное к No-archive.

NetBSD[9] и OpenBSD:[10] также поддерживают (System) Archived.

В OS X был добавлен ещё один атрибут[11]

  • (User) Hidden: Означает, что по умолчанию файл с таким атрибутом не будет отображаться средствами графического интерфейса, хотя команда ls всё равно будет показывать его.

В Solaris для ZFS также существуют атрибуты:

  • av_quarantined: Доступ к файлу ограничен до снятия карантина антивируса.
  • av_modified: Означает, что текущая версия файла не проверена антивирусом.

Изменение значения атрибута

В DOS, OS/2 и командной строке Windows, атрибуты файла могут быть изменены командой attrib[3][12] С помощью Проводника Windows также можно изменять некоторые атрибуты, но не атрибут «системный»[5] Windows PowerShell имеет две команды для чтения/записи атрибутов: Get-ItemProperty и Set-ItemProperty.[13]

В 4.4BSD и её наследниках для просмотра атрибутов используется команда ls, а для изменения — chflags.

В Linux используются команды chattr для изменения и lsattr для просмотра атрибутов.

В Solaris используются команды chmod для изменения и ls для просмотра атрибутов.

В большинстве случаев пользователь должен иметь соответствующие права доступа для изменения атрибута.

Примечания

  1. Definition of: file attribute (недоступная ссылка). PC Magazine. Ziff Davis. Дата обращения: 2 декабря 2012. Архивировано 16 января 2013 года.
  2. File attributes. Computer Hope. Дата обращения: 2 декабря 2012. Архивировано 30 ноября 2012 года.
  3. 3,0 3,1 In Windows, what are file attributes, and how can I change them? (англ.). Knowledge Base. Indiana University (11 October 2011). Дата обращения: 2 декабря 2012. Архивировано 4 марта 2016 года.
  4. What is a hidden file?. Windows 7 Help. Microsoft. Дата обращения: 2 декабря 2012. Архивировано 10 января 2013 года.
  5. 5,0 5,1 You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, in Windows Vista or in Windows 7. Microsoft Support. Microsoft (31 May 2012). Дата обращения: 2 декабря 2012. Архивировано 22 ноября 2012 года.
  6. Проект OpenNet: MAN chflags (2) Системные вызовы (FreeBSD и Linux). Дата обращения: 7 февраля 2015. Архивировано 22 апреля 2014 года.
  7. 7,0 7,1 chflags(2). Дата обращения: 7 февраля 2015. Архивировано 22 апреля 2014 года.
  8. 8,0 8,1 DragonFly On-Line Manual Pages : chflags(2). Дата обращения: 7 февраля 2015. Архивировано 22 апреля 2014 года.
  9. chflags(2) — NetBSD Manual Pages. Дата обращения: 7 февраля 2015. Архивировано 22 апреля 2014 года.
  10. OpenBSD manual pages (недоступная ссылка). Дата обращения: 7 февраля 2015. Архивировано 24 сентября 2015 года.
  11. chflags(2) Mac OS X Developer Tools Manual Page. Дата обращения: 7 февраля 2015. Архивировано 22 апреля 2014 года.
  12. Definition of: DOS Attrib (недоступная ссылка). PC Magazine. Ziff Davis. Дата обращения: 2 декабря 2012. Архивировано 2 марта 2012 года.
  13. Use a PowerShell Cmdlet to Work with File Attributes. Hey, Scripting Guy! Blog. Microsoft (26 January 2011). Дата обращения: 3 декабря 2012. Архивировано 29 января 2011 года.

Ссылки

  • Definition of: DOS Attrib Архивная копия от 2 марта 2012 на Wayback Machine в PC Magazine

  • фиксированное имя (последовательность символов, число или что-то иное, однозначно характеризующее файл)
  • определенное логическое представление и соответствующие ему операции чтения/записи
Может быть любой — от последовательности бит до базы данных с произвольной организацией или любым промежуточным вариантом.
Первому случаю соответствуют операции чтения/записи потока и/или массива (то есть последовательные или с доступом по индексу), второму — команды СУБД. Промежуточные варианты — чтение и разбор всевозможных форматов файлов.На страже безопасности: как компании с закрытым контуром выбрать систему КЭДО 2.7 т

В отличие от переменной, файл (в частности, его имя) имеет смысл вне конкретной программы. Работа с файлами — по крайней мере, в «простейшем» представлении — реализуется средствами операционных систем, а до их появления реализовывалась их предшественниками — мониторами и библиотеками подпрограмм.

Ресурсами, доступными через файлы, в принципе, может быть что угодно, представимое в цифровом виде. Чаще всего в их перечень входят:

  • области данных (необязательно на диске)
  • устройства (как физические, так и виртуальные)
  • потоки данных (в частности, вход или выход другого процесса)
  • сетевые ресурсы
  • объекты операционной системы

Файлы первого типа исторически возникли первыми и распространены наиболее широко, поэтому часто «файлом» называют и область данных, соответствующую имени. Так как файл в разных операционных системах обладает различным набором атрибутов, свойств и методов доступа, формулировки универсального определения, которое бы учитывало все особенности, сформулировано не было.

Файловая система

По мере развития вычислительной техники файлов в системах становилось все больше. Для удобства работы с ними их, как и другие данные, стали организовывать в структуры (тогда же появились символьные имена). Вначале это был простой массив, «привязанный» к конкретному носителю информации. В настоящее время наибольшее распространение получила древовидная организация с возможностью монтирования и вставки дополнительных связей (т. е. ссылок). Соответственно, имя файла приобрело характер пути к файлу: перечисление узлов дерева файловой системы, которые нужно пройти, чтобы до него добраться.

Файл как объект API операционной системы

Операционная система предоставляет приложениям набор функций и структур для работы с файлами. Возможности операционной системы накладывают дополнительные ограничения на ограничения файловой системы. С точки зрения Application Programming Interface (API) файл — объект, по отношению к которому могут быть применены функции этого API. На уровне API уже не существенно, существует ли файл как объект файловой системы или является, например, устройством ввода/вывода.

Свойства файла

В зависимости от файловой системы, файл может обладать различным набором свойств.

Имя файла

В большинстве файловых систем имя файла используется для указания к какому именно файлу производится обращение. В различных файловых системах ограничения на имя файла сильно различаются:

  • В FAT16 и FAT12 размер имени файла ограничен 8 символами (3 символа расширения).
  • В VFAT ограничение 255 байт.
  • В FAT32, HPFS имя файла ограниченно 255 символами
  • В NTFS имя ограничено 254 символами Unicode
  • В ext2/ext3 ограничение 255 байт.

Помимо ограничений файловой системы, интерфейсы операционной системы дополнительно ограничивают набор символов, который допустим при работе с файлами.

  • Для MS-DOS в имени файла допустимы только заглавные буквы, цифры. Не допустим пробел, знак вопроса, звёздочка, символы больше/меньше, символ вертикальной черты.[1]. При вызове системных функций именами файлов в нижнем или смешанном регистре, они приводятся к верхнему регистру.
  • Для Microsoft Windows в имени файла разрешены заглавные и строчные буквы, цифры, некоторые знаки препинания, пробел. Запрещены символы «>», «<», «|», «?», «*», «/», «\», «:», «»».
  • Для GNU/Linux (с учётом возможности маскировки) разрешены все символы, кроме «/» и нулевого байта.

Большинство операционных систем требуют уникальности имени файла в одном каталоге, хотя некоторые системы допускают файлы с одинаковыми именами (например, при работе с ленточными накопителями).

Расширение имени файла

Расширение имени файла (часто расширение файла или расширение) как самостоятельный атрибут файла существовал в файловых системах FAT16, FAT12, и использовался для определения типа файла. В остальных файловых системах расширение — условность, часть имени, отделённая самой правой точкой в имени.

Атрибуты

В некоторых файловых системах предусмотрены атрибуты (обычно это бинарное значение «да»/«нет», кодируемое одним битом). Практически атрибуты не влияют на возможность доступа к файлам, для этого в некоторых файловых системах существуют права доступа.

Название атрибута перевод значение файловые системы операционные системы
READ ONLY только для чтения в файл запрещено писать FAT32, FAT12, FAT16, NTFS, HPFS, VFAT DOS, OS/2, Windows
SYSTEM системный критический для работы операционной системы файл FAT32, FAT12, FAT16, NTFS, HPFS, VFAT DOS, OS/2, Windows
HIDDEN скрытый файл скрывается от показа, пока явно не сказано обратное FAT32, FAT12, FAT16, NTFS, HPFS, VFAT DOS, OS/2, Windows
ARCHIVE архивный(требующий архивации) файл изменён после резервного копирования или не был скопирован программами резервного копирования FAT32, FAT12, FAT16, NTFS, HPFS, VFAT DOS, OS/2, Windows

Время

Для файла могут быть определены следующие временные метки:

  • Время создания
  • Время модификации
  • Время последнего доступа

Владелец и группа файла

В некоторых файловых системах предусмотрено указание на владельца файла, и группу владельца.

Права доступа

В некоторых файловых системах предусмотрена возможность для ограничения доступа пользователей к содержимому файла

В UNIX-подобных операционных системах для файлов обычно выделяют три типа прав:

  • Право на запись
  • Право на чтение
  • Право на выполнение

Каждое право задаётся раздельно для владельца, для группы и для всех остальных. ACL позволяют расширить этот список.

В операционных системах Windows NT при работе с файловой системой NTFS права доступа задаются явно для пользователей или групп (или наследуются от вышестоящих объектов). Права в себя включают:

  • Право на чтение
  • Право на запись
  • Право на исполнение
  • Право на удаление
  • Право на смену атрибутов и владельца
  • Право на создание, удаление подпапок (для папок)
  • Право на чтение прав доступа

Каждое право может быть задано как разрешением, так и запретом, запрет имеет больший приоритет, чем разрешение.

Операции с файлом

Условно можно выделить два типа операций с файлом — связанные с его открытием, и выполняющиеся без его открытия. Операции первого типа обычно служат для чтения/записи информации или подготовки к записи/чтению. Операции второго типа выполняются с файлом как с «объектом» файловой системы, в котором файл является мельчайшей единицей структурирования.

Операции, связанные с открытием файла

В зависимости от операционной системы те или иные операции могут отсутствовать.

Обычно выделяют дополнительные сущности, связанные с работой с файлом:

  • хэндлер файла, или дескриптор (описатель). При открытии файла (в случае, если это возможно), операционная система возвращает число (или указатель на структуру), с помощью которого выполняются все остальные файловые операции. По их завершению файл закрывается, а хэндлер теряет смысл.
  • файловый указатель. Число, являющееся смещением относительно нулевого байта в файле. Обычно по этому адресу осуществляется чтение/запись, в случае, если вызов операции чтения/записи не предусматривает указание адреса. При выполнении операций чтения/записи файловый указатель смещается на число прочитанных (записанных) байт. Последовательный вызов операций чтения таким образом позволяет прочитать весь файл не заботясь о его размере.
  • файловый буфер. Операционная система (и/или библиотека языка программирования) осуществляет кеширование файловых операций в специальном буфере (участке памяти). При закрытии файла буфер сбрасывается.
  • режим доступа. В зависимости от потребностей программы, файл может быть открыт на чтение и/или запись. Кроме того, некоторые операционные системы (и/или библиотеки) предусматривают режим работы с текстовыми файлами. Режим обычно указывается при открытии файла.
  • режим общего доступа. В случае многозадачной операционной системы возможна ситуация, когда несколько программ одновременно хотят открыть файл на запись и/или чтение. Для регуляции этого существуют режимы общего доступа, указывающие на возможность осуществления совместного доступа к файлу (например, файл в который производится запись может быть открыт для чтения другими программами — это стандартный режим работы log-файлов).
Операции
  • Открытие файла (обычно в качестве параметров передается имя файла, режим доступа и режим совместного доступа, а в качестве значения выступает файловый хэндлер или дескриптор), кроме того обычно имеется возможность в случае открытия на запись указать на то, должен ли размер файла изменяться на нулевой.
  • Закрытие файла. В качестве аргумента выступает значение, полученное при открытии файла. При закрытии все файловые буферы сбрасываются.
  • Запись — в файл помещаются данные.
  • Чтение — данные из файла помещаются в область памяти.
  • Перемещение указателя — указатель перемещается на указанное число байт вперёд/назад или перемещается по указанному смещению относительно начала/конца. Не все файлы позволяют выполнение этой операции (например, файл на ленточном накопителе может не «уметь» перематываться назад).
  • Сброс буферов — содержимое файловых буферов с незаписанной в файл информацией записывается. Используется обычно для указания на завершение записи логического блока (для сохранения данных в файле на случай сбоя).
  • Получение текущего значения файлового указателя.

Операции, не связанные с открытием файла

Операции, не требующие открытия файла оперируют с его «внешними» признаками — размером, именем, положением в дереве каталогов. При таких операциях невозможно получить доступ к содержимому файла, файл является минимальной единицей деления информации.

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

Список операций с файлами
  • Удаление файла
  • Переименование файла
  • Копирование файла
  • Перенос файла на другую файловую систему/носитель информации
  • Создание симлинка или хардлинка
  • Получение или изменение атрибутов файла

Типы файлов

В различных операционных системах и/или файловых системах могут быть реализованы различные типы файлов; кроме того, реализация различных типов может различаться.

  • «Обыкновенный файл» — файл, позволяющий операции чтения, записи, перемещения внутри файла
  • Директория (англ. directory — алфавитный справочник, часто переводится как каталог) — файл, содержащий в себе записи о других файлах. Директории могут содержать записи о других директориях, образуя древовидную структуру.
  • Жёсткая ссылка (англ. hardlink, часто используется калька хардлинк) — в общем случае одна и та же область информации может иметь несколько имён, указывающих на одни и те же данные. В этом случае такие имена называют жёсткими ссылками (хардлинками). В общем случае после создания хардлинка сказать где «настоящий» файл а где хардлинк невозможно, так как имена равноправны; а область данных существует до тех пор пока существует хотя бы одно из имён. Хардлинки возможны только на одном физическом носителе.
  • Символьная ссылка (cимлинк, софтлинк) — файл, содержащий в себе ссылку на другой файл или директорию. Может ссылаться на любой элемент файловой системы, в том числе, и расположенный на другом физическом носителе.

Файловая
система

Одной из
основных задач ОС является предоставление удобств пользователю при работе с
данными, хранящимися на дисках. Для этого ОС подменяет физическую структуру
хранящихся данных некоторой удобной для пользователя логической моделью,
которая реализуется в виде дерева каталогов, выводимого на экран такими
утилитами, как Norton Commander, Far Manager или Windows Explorer. Базовым
элементом этой модели является файл, который так же, как и файловая
система
 в целом, может характеризоваться как логической, так и
физической структурой.

Управление
файлами

Файл –
именованная область внешней памяти, предназначенная для считывания и записи
данных.

Файлы
хранятся в памяти, не зависящей от энергопитания. Исключением является
электронный диск, когда в ОП создается структура, имитирующая файловую систему.

Файловая
система
 (ФС) — это компонент ОС, обеспечивающий организацию создания,
хранения и доступа к именованным наборам данных — файлам.

Файловая
система включает:Файловая система включает:

  • Совокупность
    всех фалов на диске.
  • Наборы
    структур данных, используемых для управления файлами (каталоги файлов,
    дескрипторы файлов, таблицы распределения свободного и занятого пространства
    на диске).
  • Комплекс
    системных программных средств, реализующих различные операции над файлами:
    создание, уничтожение, чтение, запись, именование, поиск.

Задачи,
решаемые ФС, зависят от способа организации вычислительного процесса в целом.
Самый простой тип – это ФС в однопользовательских и однопрограммных ОС.
Основные функции в такой ФС нацелены на решение следующих задач:

  • Именование
    файлов.
  • Программный
    интерфейс для приложений.
  • Отображения
    логической модели ФС на физическую организацию хранилища данных.
  • Устойчивость
    ФС к сбоям питания, ошибкам аппаратных и программных средств.

Задачи ФС
усложняются в однопользовательских многозадачных ОС, которые предназначены для
работы одного пользователя, но дают возможность запускать одновременно
несколько процессов. К перечисленным выше задачам добавляется новая задача —
совместный доступ к файлу из нескольких процессов.

Файл в этом
случае является разделяемым ресурсом, а значит ФС должна решать весь комплекс
проблем, связанных с такими ресурсами. В частности: должны быть предусмотрены
средства блокировки файла и его частей, согласование копий, предотвращение
гонок, исключение тупиков. В многопользовательских системах появляется еще одна
задача: Защита файлов одного пользователя от несанкционированного доступа другого
пользователя.

Еще более
сложными становятся функции ФС, которая работает в составе сетевой ОС ей
необходимо организовать защиту файлов одного пользователя от
несанкционированного доступа другого пользователя.

Основное
назначение файловой системы и соответствующей ей системы
управления файлами
– организация удобного управления файлами,
организованными как файлы: вместо низкоуровневого  доступа к данным с
указанием конкретных физических адресов нужной нам записи, используется
логический доступ  с указанием имени файла и записи в нем.

Термины
«файловая система» и «система управления файлами» необходимо различать:
файловая система определяет, прежде всего, принципы доступа к данным,
организованным как файлы. А термин «система управления файлами» следует употреблять
по отношению к конкретной реализации файловой системы, т.е. это комплекс
программных модулей, обеспечивающих работу с файлами в конкретной ОС.

Пример

Файловая
система FAT (file allocation table) имеет множество реализаций как система
управления файлами

  • Система,
    разработанная для первых ПК называлась просто FAT (сейчас ее называют
    просто FAT-12) . Ее разрабатывали для работы с дискетами, и некоторое
    время она использовалась для работы с жесткими дисками.
  • Потом
    ее усовершенствовали для работы с жесткими дисками большего  объема,
    и эта новая реализация получила название FAT–16. это название используется
    и по  отношению к СУФ самой MS-DOS.
  • Реализация
    СУФ для OS/2  называется super-FAT (основное отличие – возможность
    поддерживать для каждого файла расширенные атрибуты).
  • Есть
    версия СУФ и для Windows 9x/NT и т.д. (FAT-32).

Типы
файлов

Обычные 
файлы
: содержат информацию произвольного характера, которую заносит в них
пользователь или которая образуется в результате работы системных и
пользовательских программ. Содержание обычного файла определяется приложением,
которое с ним работает.

Обычные
файлы могут быть двух типов:

  1. Программные (исполняемые)
    –  представляют собой программы, написанные на командном языке ОС, и
    выполняют некоторые системные функции (имеют расширения .exe, .com, .bat).
  2. Файлы
    данных
     –  все прочие типы файлов: текстовые и графические
    документы, электронные таблицы, базы данных и др.

Каталоги –
это, с одной стороны, группа файлов, объединенных пользователем исходя из
некоторых соображений (например, файлы, содержащие программы игр, или файлы,
составляющие один программный пакет), а с другой стороны – это особый тип
файлов, которые содержат системную справочную информацию о наборе файлов,
сгруппированных пользователями по какому-либо неформальному признаку  (тип
файла, расположение его  на диске, права доступа, дата создания и
модификация).

Специальные
файлы
 – это фиктивные файлы, ассоциированные с устройствами
ввода/вывода, которые используются для унификации механизма доступа к файлам и
внешним устройствам. Специальные файлы позволяют пользователю осуществлять
операции ввода/вывода посредством обычных команд записи с файлов или чтения из
файлов. Эти команды обрабатываются сначала программами ФС, а затем на некотором
этапе выполнения запроса преобразуются  ОС в команды управления
соответствующим устройством (PRN, LPT1 – для порта принтера (символьные имена,
для ОС – это файлы), CON – для клавиатуры).

Пример.
Copy con text1 (работа с клавиатурой).

Файловая
структура

Файловая
структура
 –  вся совокупность файлов на диске и взаимосвязей
между ними (порядок хранения файлов на диске).

Виды
файловых структур:

  • простая,
    или одноуровневая: каталог представляет собой линейную
    последовательность файлов.
  • иерархическая или многоуровневая:
    каталог сам может входить в состав другого каталога и содержать внутри
    себя множество файлов и подкаталогов. Иерархическая структура может быть
    двух видов: «Дерево» и «Сеть». Каталоги образуют «Дерево», если файлу
    разрешено входить только в один каталог (ОС MS-DOS, Windows) и «Сеть» –
    если файл может входить сразу в несколько каталогов (UNIX).
  • Файловая 
    структура может быть представлена в виде графа, описывающего иерархию
    каталогов и файлов:

Типы имен
файлов

Файлы
идентифицируются именами. Пользователи дают файлам символьные имена,
при этом учитываются ограничения ОС как на используемые символы, так и на длину
имени. В ранних файловых системах эти границы были весьма узкими. Так в
популярной файловой системе FATдлина имен ограничивается известной
схемой 8.3 (8 символов — собственно имя, 3 символа — расширение имени), а в ОС
UNIX System V имя не может содержать более 14 символов.

Однако
пользователю гораздо удобнее работать с длинными именами, поскольку они
позволяют дать файлу действительно мнемоническое название, по которому даже
через достаточно большой промежуток времени можно будет вспомнить, что содержит
этот файл. Поэтому современные файловые системы, как правило, поддерживают
длинные символьные имена файлов.

Например,
Windows NT в своей файловой системе NTFS устанавливает, что имя файла может
содержать до 255 символов, не считая завершающего нулевого символа.

При
переходе к длинным именам возникает проблема совместимости с ранее созданными
приложениями, использующими короткие имена. Чтобы приложения могли обращаться к
файлам в соответствии с принятыми ранее соглашениями, файловая система должна
уметь предоставлять эквивалентные короткие имена (псевдонимы) файлам, имеющим
длинные имена. Таким образом, одной из важных задач становится проблема
генерации соответствующих коротких имен.

Символьные
имена могут быть трех типов: простые, составные и относительные:

  1. Простое
    имя
     идентифицирует файл в пределах одного каталога, присваивается
    файлам с учетом номенклатуры символа и длины имени.
  2. Полное
    имя
     представляет собой цепочку простых символьных имен всех
    каталогов, через которые проходит путь от корня до данного файла, имени
    диска, имени файла. Таким образом, полное имя является составным,
    в котором простые имена отделены друг от друга принятым в ОС разделителем.
  3. Файл
    может быть идентифицирован также относительным именем.
    Относительное имя файла определяется через понятие «текущий каталог». В
    каждый момент времени один из каталогов является текущим, причем этот
    каталог выбирается самим пользователем по команде ОС. Файловая система
    фиксирует имя текущего каталога, чтобы затем использовать его как
    дополнение к относительным именам для образования полного имени файла.

В
древовидной файловой структуре между файлом и его полным именем имеется взаимно
однозначное соответствие –  «один файл — одно полное имя». В сетевой
файловой структуре файл может входить в несколько каталогов, а значит может
иметь несколько полных имен; здесь справедливо соответствие – «один файл —
много полных имен».

Для файла 2.doc определить все три типа имени, при условии, что текущим каталогом является каталог 2008_год.

  • Простое
    имя: 2.doc
  • Полное
    имя: C:\2008_год\Документы\2.doc
  • Относительное
    имя: Документы\2.doc

Атрибуты
файлов

Важной
характеристикой файла являются атрибуты. Атрибуты – это
информация, описывающая свойства файлов. Примеры возможных атрибутов файлов:

  • Признак
    «только для чтения» (Read-Only);
  • Признак
    «скрытый файл» (Hidden);
  • Признак
    «системный файл» (System);
  • Признак
    «архивный файл» (Archive);
  • Тип
    файла (обычный файл, каталог, специальный файл);
  • Владелец
    файла;
  • Создатель
    файла;
  • Пароль
    для доступа к файлу;
  • Информация
    о разрешенных операциях доступа к файлу;
  • Время
    создания, последнего доступа и последнего изменения;
  • Текущий
    размер файла;
  • Максимальный
    размер файла;
  • Признак
    «временный (удалить после завершения процесса)»;
  • Признак
    блокировки.

В файловых
системах разного типа для характеристики файлов могут использоваться разные
наборы атрибутов (например, в однопользовательской ОС в наборе атрибутов будут отсутствовать
характеристики, имеющие отношение к пользователю и защите (создатель файла,
пароль для доступа к файлу и т.д.).

Пользователь
может получать доступ к атрибутам, используя средства, предоставленные для этих
целей файловой системой. Обычно разрешается читать значения любых  
атрибутов, а изменять – только некоторые, например можно изменить права доступа
к файлу, но нельзя изменить дату создания или текущий размер файла.

Права
доступа к файлу

Определить
права доступа к файлу — значит определить для каждого пользователя набор
операций, которые он может применить к данному файлу. В разных файловых
системах может быть определен свой список дифференцируемых операций доступа.
Этот список может включать следующие операции:

  • создание
    файла.
  • уничтожение
    файла.
  • запись
    в файл.
  • открытие
    файла.
  • закрытие
    файла.
  • чтение
    из файла.
  • дополнение
    файла.
  • поиск
    в файле.
  • получение
    атрибутов файла.
  • установление
    новых значений атрибутов.
  • переименование.
  • выполнение
    файла.
  • чтение
    каталога и др.

В самом общем случае права доступа могут быть описаны матрицей прав доступа, в которой столбцы соответствуют всем файлам системы, строки — всем пользователям, а на пересечении строк и столбцов указываются разрешенные операции:

В некоторых системах пользователи могут быть разделены на отдельные категории. Для всех пользователей одной категории определяются единые права доступа, например в системе UNIX все пользователи подразделяются на три категории: владельца файла, членов его группы и всех остальных.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как разделить ssd диск на 2 части windows 10 при установке
  • Write a sentence explaining why windows is so popular
  • Что делать если звуковые устройства не установлены на windows 10
  • Возврат к заводским настройкам windows 10 pro
  • Windows хостинг что это