Расширения файлов в c
Разделение на файлы с исходным кодом и заголовочные файлы чисто условное, нет правил, запрещающих использовать .cpp файл как заголовочный, однако мы не рекомендуем так делать — использование общепринятых правил именования файлов упростит жизнь вам и вашим коллегам.
Не стоит помещать определения в заголовочные файлы без явной необходимости. В C++ есть способы, позволяющие поместить определение в заголовочный файл, не вызвав при этом ошибки компоновщика, но, как правило, это приводит к увеличению объектного файла и программы в целом.
Объявления и определения
Объявление (declaration) — вводит имя, возможно, не определяя деталей. Например, ниже перечислены объявления:
- int a; — объявление переменной типа int,
- void foo(); — объявление функции с именем foo,
- void bar() < foo(); >— объявление функции с именем bar.
Определение (definition) — это объявление, дополнительно определяющее детали, необходимые компилятору. Из перечисленных выше объявлений, определениями являются только два:
- int a; — объявление переменной типа int,
- void bar() < foo(); >— объявление функции вместе с телом является определением.
Для определения переменной достаточно указать ее тип, а для определения функций, кроме имени, типов параметров и возвращаемого значения, нужно указать еще тело функции. Проще говоря, определение содержит всю информацию, необходимую компилятору, чтобы выделить память для хранения объекта.
Ключевое слово extern как раз и позволяет сказать компилятору, что переменную нужно только объявить, при этом не нужно выделять под нее память — память под нее должна быть выделена в другом месте (возможно даже в другом файле).
Программы C++ допускают существование нескольких объявлений одного объекта (переменной, функции и др.), но не допускают наличия нескольких определений. Как правило, нарушение этого принципа приводит к ошибкам компоновщика, но может приводить и к ошибкам компиляции (повторное определение типов).
В файлы для кода кладутся определения. В заголовочные файлы нужно класть объявления. Соответственно если есть какая-то функция, её определение пишется внутрь файла с кодом (т.е. внутрь .cpp файла), а если нужно использовать данную функцию за пределами этого файла, то её объявление добавляется в некоторый .hpp файл, который включается в каждый файл в котором нужно эту функцию вызывать.
Заголовочные файлы
Т.к. это два разных файла, то их компиляция будет проходить по отдельности. И когда компилятор будет читать файл foo.cpp, то встретив вызов функции bar, он не будет знать, что это функция определена в каком-то другом файла.
Предположим, что мы изменили функцию bar. Следующий код некорректен — объявление отличается от определения. Данный код скомпилируется, но его поведение неопределенно.
Предположим, что функция bar используется не в одном файле, а в нескольких, тогда придётся исправлять объявления функции bar в этих файлах, в каждом по отдельности. Для того чтобы локализовать изменения используются заголовочные файлы. В заголовочный файл выносится объявление функции и во всех местах, где функция используется, просто подключается соответствующий заголовочный файл.
Файл foo.cpp:
Может случиться двойное включение заголовочного файла.
Файл foo.cpp:
Например, есть проект, в котором есть три файла с различными определениями: utility.cpp, lexer.cpp и parser.cpp. Каждому файлу соответствует заголовочный файл с необходимыми объявлениями: utility.hpp, lexer.hpp и parser.hpp. Каждый из файлов определений непосредственно (т. е. с помощью директивы include) подключает соответствующий ему заголовочный файл с объявлениями (т. е. utility.cpp подключает utility.hpp, а lexer.cpp подключает lexer.hpp и аналогично для parser.cpp и parser.hpp). Кроме того, файл parser.hpp непосредственно подключает заголовки lexer.hpp и utility.hpp, а файл lexer.hpp подключает заголовок utility.hpp.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет свойства и методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также позволяет создавать объекты FileStream. Этот класс не наследуется.
Перегрузки
Возвращает расширение из пути к файлу, представленного диапазоном символов только для чтения.
Возвращает расширение указанной строки пути (включая точку ".").
Применяется к
Комментарии
Этот метод получает расширение path путем поиска path точки ("."), начиная с последнего символа в диапазоне только для чтения и продолжая к первому символу. Если точка найдена до или DirectorySeparatorChar AltDirectorySeparatorChar символа, возвращаемый диапазон только для чтения содержит точку и символы после нее; в противном случае ReadOnlySpan.Empty возвращается.
GetExtension(String)
Возвращает расширение указанной строки пути (включая точку ".").
Параметры
Строка пути, из которой нужно получить расширение.
Возвращаемое значение
Расширение указанного пути (включая точку ".") или значение null или Empty. Если параметр path имеет значение null , GetExtension(String) возвращает null . Если параметр path не содержит сведений о расширении, GetExtension(String) возвращает Empty.
Исключения
Конструкторы
Выполняет инициализацию нового экземпляра класса FileInfo, который служит оболочкой для пути файла.
Представляет полный путь к каталогу или файлу.
Первоначально заданный пользователем относительный или абсолютный путь.
GetExtension(ReadOnlySpan)
Возвращает расширение из пути к файлу, представленного диапазоном символов только для чтения.
Параметры
Путь к файлу, из которого необходимо получить расширение.
Возвращаемое значение
Расширение указанного пути (включая точку — ".") или Empty, если в path отсутствуют сведения о расширении.
Работа с файлами в языке Си
Для программиста открытый файл представляется как последовательность считываемых или записываемых данных. При открытии файла с ним связывается поток ввода-вывода . Выводимая информация записывается в поток, вводимая информация считывается из потока.
Когда поток открывается для ввода-вывода, он связывается со стандартной структурой типа FILE , которая определена в stdio.h . Структура FILE содержит необходимую информацию о файле.
Открытие файла осуществляется с помощью функции fopen() , которая возвращает указатель на структуру типа FILE , который можно использовать для последующих операций с файлом.
name – имя открываемого файла (включая путь),
type — указатель на строку символов, определяющих способ доступа к файлу:
- "r" — открыть файл для чтения (файл должен существовать);
- "w" — открыть пустой файл для записи; если файл существует, то его содержимое теряется;
- "a" — открыть файл для записи в конец (для добавления); файл создается, если он не существует;
- "r+" — открыть файл для чтения и записи (файл должен существовать);
- "w+" — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется;
- "a+" — открыть файл для чтения и дополнения, если файл не существует, то он создаётся.
Возвращаемое значение — указатель на открытый поток. Если обнаружена ошибка, то возвращается значение NULL .
Функция fclose() закрывает поток или потоки, связанные с открытыми при помощи функции fopen() файлами. Закрываемый поток определяется аргументом функции fclose() .
Возвращаемое значение: значение 0, если поток успешно закрыт; константа EOF , если произошла ошибка.
Чтение символа из файла:
Аргументом функции является указатель на поток типа FILE . Функция возвращает код считанного символа. Если достигнут конец файла или возникла ошибка, возвращается константа EOF .
Запись символа в файл:
Аргументами функции являются символ и указатель на поток типа FILE . Функция возвращает код считанного символа.
Функции fscanf() и fprintf() аналогичны функциям scanf() и printf() , но работают с файлами данных, и имеют первый аргумент — указатель на файл.
Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами.
Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки ‘\n’ , который включается в строку, или пока не наступит конец потока EOF или не будет прочитано максимальное количество символов. Результат помещается в указатель на строку и заканчивается нуль- символом ‘\0’ . Функция возвращает адрес строки.
Копирует строку в поток с текущей позиции. Завершающий нуль- символ не копируется.
Пример Ввести число и сохранить его в файле s1.txt. Считать число из файла s1.txt, увеличить его на 3 и сохранить в файле s2.txt.
Результат выполнения — 2 файла
Работа с файлами в C++ описана здесь.
Добрый день. Подскажите пожалуйста, возможно ли в С++ читать содержимое только файлов имеющих в своём имени только цифры? Например читать: 56.txt, 78.txt,99.txt и т.д. И не читать hellou.txt. Если да какие библиотеки и функции нужно использовать? В интернете по обработке имен файлов мало инфы.
Возможно сделать проверку имени файла на соответствие формату. Но само имя файла задаётся пользователем.
Здравствуйте, я сделал посимвольный вывод текстового файла. Как можно реализовать запрет переноса слов в консоли?
Считать количество выведенных символов в строке и длину следующего слова. Если количество символов +длина слова больше 80, то нужно перенести строчку и начать вывод с новой строки. При этом пост вольный вывод не получится - придется использовать буфер (массив) для хранения следующего слова.
Это исключительно удобно в случаях, когда вы хотите добавить функционал к таким типам, которых не контролируете. Фактически, любому рано или поздно приходилось писать расширение для BCL, просто чтобы сделать некоторые вещи более доступными.
Но, наряду со сравнительно очевидными случаями использования, есть и очень интересные паттерны, завязанные непосредственно на использовании методов расширений и демонстрирующие, как их можно задействовать не самым традиционным образом.
Добавление методов к перечислениям
В некоторых случаях может быть полезно запрограммировать логику в перечисление. Например, если значение перечисления может существовать в нескольких разных представлениях, и вы хотели бы легко преобразовывать одно в другое.
Например, представьте себе следующий тип в обычном приложении, позволяющем сохранять файлы в различных форматах:
Данное перечисление определяет список форматов, поддерживаемых в приложении, и может использоваться в разных частях приложения для инициирования логики ветвления в зависимости от конкретного значения.
Поскольку каждый формат файла может быть представлен в виде файлового расширения, было бы хорошо, если бы в каждом FileFormat содержался метод для получения этой информации. Как раз при помощи метода расширения это и можно сделать, примерно так:
Что, в свою очередь, позволяет нам поступить так:
Рефакторинг классов моделей
Бывает, что вы не хотите добавлять метод непосредственно к классу, например, если работаете с анемичной моделью.
Анемичные модели обычно представлены набором публичных неизменяемых свойств, только для получения. Поэтому при добавлении методов к классу модели может создаться впечатление, что нарушается чистота кода, либо можно заподозрить, что методы обращаются к какому-либо приватному состоянию. Методы расширения такой проблемы не вызывают, поскольку не имеют доступа к приватным членам модели и по природе своей не являются частью модели.
Итак, рассмотрим следующий пример с двумя моделями: одна представляет закрытый список титров, а другая – отдельную строку титров:
В текущем состоянии, если потребуется получить строку субтитров, отображенную в конкретный момент времени, мы запустим LINQ такого рода:
Здесь в самом деле напрашивается какой-либо вспомогательный метод, который можно было бы реализовать либо как метод члена, либо как метод расширения. Я предпочитаю второй вариант.
В данном случае метод расширения позволяет добиться того же, что и обычный, но дает ряд неочевидных бонусов:
- Понятно, что этот метод работает только с публичными членами класса и не изменяет его приватного состояния каким-нибудь таинственным образом.
- Очевидно, что этот метод просто позволяет срезать угол и предусмотрен здесь только для удобства.
- Этот метод относится к совершенно отдельному классу (или даже сборке), назначение которых – отделять данные от логики.
Как сделать интерфейсы разностороннее
При проектировании интерфейса всегда хочется, чтобы контракт оставался минимальным, поскольку так его будет легче реализовать. Это очень помогает, когда интерфейс предоставляет функционал в самом обобщенном виде, так что ваши коллеги (или вы сами) можете надстраивать над ним обработку более специфичных случаев.
Если вам это кажется нонсенсом, рассмотрим типичный интерфейс, сохраняющий модель в файл:
Все работает нормально, но через пару недель может подоспеть новое требование: классы, реализующие IExportService , должны не только экспортировать в файл, но и уметь писать в файл.
Таким образом, чтобы выполнить это требование, мы добавляем к контракту новый метод:
Это изменение только что сломало все имеющиеся реализации IExportService , поскольку теперь все их нужно обновить, чтобы они поддерживали и запись в память.
Но, чтобы не делать всего этого, мы могли с самого начала спроектировать интерфейс немного иначе:
В таком виде интерфейс вынуждает прописывать место назначения в максимально обобщенном виде, то есть, это Stream . Теперь при работе мы более не ограничены файлами и можем также нацеливаться на различные другие варианты вывода.
Единственный недостаток такого подхода заключается в том, что самые базовые операции становятся не столь простыми, как мы привыкли: теперь приходится задавать конкретный экземпляр Stream , обертывать его в инструкцию using и передавать как параметр.
К счастью, этот недостаток полностью обнуляется при использовании методов расширений:
Выполнив рефакторинг исходного интерфейса, мы сделали его гораздо более разносторонним и, благодаря использованию методов расширения, ничуть не пожертвовали удобством использования.
Таким образом, я считаю методы расширения бесценным инструментом, который позволяет сохранить простое простым, а сложное превратить в возможное.
Комментарии
FileInfo Используйте класс для типичных операций, таких как копирование, перемещение, переименование, создание, открытие, удаление и добавление к файлам.
При выполнении нескольких операций в одном файле можно более эффективно использовать FileInfo методы экземпляра вместо соответствующих статических методов File класса, так как проверка безопасности не всегда требуется.
FileInfo Многие методы возвращают другие типы ввода-вывода при создании или открытии файлов. Эти другие типы можно использовать для дальнейшего управления файлом. Дополнительные сведения см. в конкретных FileInfo элементах, таких как Open, , OpenRead, OpenTextCreateTextили Create.
По умолчанию всем пользователям предоставляется полный доступ на чтение и запись к новым файлам.
В следующей таблице описаны перечисления, используемые для настройки поведения различных FileInfo методов.
Перечисление | Описание |
---|---|
FileAccess | Указывает доступ на чтение и запись к файлу. |
FileShare | Указывает уровень доступа, разрешенный для файла, который уже используется. |
FileMode | Указывает, сохраняется ли содержимое существующего файла или перезаписывается, а также указывает, вызывают ли запросы на создание существующего файла исключение. |
В членах, которые принимают путь в качестве входной строки, этот путь должен быть правильно сформирован или возникает исключение. Например, если путь является полным, но начинается с пробела, путь не обрезается в методах класса. Таким образом, путь имеет неправильный формат и возникает исключение. Аналогичным образом путь или сочетание путей не могут быть полностью квалифицированы дважды. Например, "c:\temp c:\windows" также вызывает исключение в большинстве случаев. Убедитесь, что пути правильно сформированы при использовании методов, которые принимают строку пути.
В членах, которые принимают путь, путь может ссылаться на файл или только каталог. Указанный путь также может ссылаться на относительный путь или UNC-путь для сервера и имени общего ресурса. Например, все следующие допустимые пути:
Класс FileInfo предоставляет следующие свойства, позволяющие получать сведения о файле. Пример использования каждого свойства см. на страницах свойств.
Свойство Directory извлекает объект, представляющий родительский каталог файла.
Свойство DirectoryName получает полный путь к родительскому каталогу файла.
Свойство Exists проверяет наличие файла перед его выполнением.
Свойство IsReadOnly извлекает или задает значение, указывающее, можно ли изменить файл.
Извлекает Length размер файла.
Извлекает Name имя файла.
Методы
Создает StreamWriter, который добавляет текст в файл, представленный этим экземпляром FileInfo.
Копирует существующий файл в новый файл и запрещает перезапись существующего файла.
Копирует существующий файл в новый файл и разрешает перезапись существующего файла.
Создает символьную ссылку, расположенную в FullName этой точке на указанный pathToTarget .
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Создает StreamWriter, который записывает новый текстовый файл.
Расшифровывает файл, зашифрованный текущей учетной записью с помощью метода Encrypt().
Удаляет файл без возможности восстановления.
Шифрует файл таким образом, чтобы его можно было расшифровать только с помощью учетной записи, которая использовалась для шифрования.
Определяет, равен ли указанный объект текущему объекту.
Возвращает объект FileSecurity, который инкапсулирует записи списка управления доступом (ACL) для файла, описываемого текущим объектом FileInfo.
Получает объект FileSecurity, который инкапсулирует заданный тип записей списка управления доступом для файла, описываемого текущим объектом FileInfo.
Служит хэш-функцией по умолчанию.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Устанавливает объект SerializationInfo с именем файла и дополнительными сведениями об исключении.
Возвращает объект Type для текущего экземпляра.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.
Создает неполную копию текущего объекта Object.
Создает неполную копию текущего объекта MarshalByRefObject.
Перемещает заданный файл в новое местоположение и разрешает переименование файла.
Перемещает указанный файл в новое расположение, предоставляя параметры для указания нового имени файла и перезаписи конечного файла, если он уже существует.
Открывает файл в заданном режиме.
Открывает файл в заданном режиме с доступом для чтения или записи, или и для чтения, и для записи.
Открывает файл в заданном режиме с доступом для чтения, записи или и для чтения, и для записи и с заданным параметром совместного доступа.
Инициализирует новый экземпляр FileStream класса с указанным режимом создания, разрешением на чтение и запись и общий доступ, доступ к другим fileStreams может иметь тот же файл, размер буфера, дополнительные параметры файла и размер выделения.
Создает доступный только для чтения поток FileStream.
Создает поток StreamReader с кодировкой UTF-8, который считывает данные из существующего текстового файла.
Создает доступный только для чтения поток FileStream.
Обновляет состояние объекта.
Заменяет содержимое заданного файла на содержимое файла, которое описано в текущем объекте FileInfo, удаляет исходный файл и создает резервную копию замененного файла.
Заменяет содержимое заданного файла на содержимое файла, которое описано в текущем объекте FileInfo, удаляет исходный файл и создает резервную копию замененного файла. Также позволяет определить, нужно ли игнорировать ошибки слияния.
Возвращает целевой объект указанной ссылки.
Применяет записи списка управления доступом (ACL), описанные объектом FileSecurity, к файлу, который описывается текущим объектом FileInfo.
Возвращает путь в виде строки. Используйте свойство Name для полного пути.
Возвращает исходный путь. Используйте свойства FullName или Name для полного пути или имени файла или каталога.
Методы расширения
Создает файловый поток с указанными свойствами и параметрами безопасности.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Файловая структура FAT32
Устройства внешней памяти в системе FAT32 имеют не байтовую, а блочную адресацию. Запись информации в устройство внешней памяти осуществляется блоками или секторами.
Сектор – минимальная адресуемая единица хранения информации на внешних запоминающих устройствах. Как правило, размер сектора фиксирован и составляет 512 байт. Для увеличения адресного пространства устройств внешней памяти сектора объединяют в группы, называемые кластерами.
Кластер – объединение нескольких секторов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами. Основным свойством кластера является его размер, измеряемый в количестве секторов или количестве байт.
Файловая система FAT32 имеет следующую структуру.
Нумерация кластеров, используемых для записи файлов, ведется с 2. Как правило, кластер №2 используется корневым каталогом, а начиная с кластера №3 хранится массив данных. Сектора, используемые для хранения информации, представленной выше корневого каталога, в кластеры не объединяются.
Минимальный размер файла, занимаемый на диске, соответствует 1 кластеру.
Загрузочный сектор начинается следующей информацией:
- EB 58 90 – безусловный переход и сигнатура;
- 4D 53 44 4F 53 35 2E 30 MSDOS5.0;
- 00 02 – количество байт в секторе (обычно 512);
- 1 байт – количество секторов в кластере;
- 2 байта – количество резервных секторов.
Кроме того, загрузочный сектор содержит следующую важную информацию:
- 0x10 (1 байт) – количество таблиц FAT (обычно 2);
- 0x20 (4 байта) – количество секторов на диске;
- 0x2С (4 байта) – номер кластера корневого каталога;
- 0x47 (11 байт) – метка тома;
- 0x1FE (2 байта) – сигнатура загрузочного сектора ( 55 AA ).
Сектор информации файловой системы содержит:
- 0x00 (4 байта) – сигнатура ( 52 52 61 41 );
- 0x1E4 (4 байта) – сигнатура ( 72 72 41 61 );
- 0x1E8 (4 байта) – количество свободных кластеров, -1 если не известно;
- 0x1EС (4 байта) – номер последнего записанного кластера;
- 0x1FE (2 байта) – сигнатура ( 55 AA ).
Таблица FAT содержит информацию о состоянии каждого кластера на диске. Младшие 2 байт таблицы FAT хранят F8 FF FF 0F FF FF FF FF (что соответствует состоянию кластеров 0 и 1, физически отсутствующих). Далее состояние каждого кластера содержит номер кластера, в котором продолжается текущий файл или следующую информацию:
- 00 00 00 00 – кластер свободен;
- FF FF FF 0F – конец текущего файла.
Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:
- 8 байт – имя файла;
- 3 байта – расширение файла;
Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:
- 8 байт – имя файла;
- 3 байта – расширение файла;
- 1 байт – атрибут файла:
- 1 байт – зарезервирован;
- 1 байт – время создания (миллисекунды) (число от 0 до 199);
- 2 байта – время создания (с точностью до 2с):
- 2 байта – дата создания:
- 2 байта – дата последнего доступа;
- 2 байта – старшие 2 байта начального кластера;
- 2 байта – время последней модификации;
- 2 байта – дата последней модификации;
- 2 байта – младшие 2 байта начального кластера;
- 4 байта – размер файла (в байтах).
В случае работы с длинными именами файлов (включая русские имена) кодировка имени файла производится в системе кодировки UTF-16. При этого для кодирования каждого символа отводится 2 байта. При этом имя файла записывается в виде следующей структуры:
- 1 байт последовательности;
- 10 байт содержат младшие 5 символов имени файла;
- 1 байт атрибут;
- 1 байт резервный;
- 1 байт – контрольная сумма имени DOS;
- 12 байт содержат младшие 3 символа имени файла;
- 2 байта – номер первого кластера;
- остальные символы длинного имени.
Далее следует запись, включающая имя файла в формате 8.3 в обычном формате.
Примеры
В следующем примере показано использование GetExtension метода на классической платформе на основе Windows.
Примеры
В следующем примере показаны некоторые основные члены FileInfo класса.
При первом получении FileInfo свойств вызывает Refresh метод и кэширует сведения о файле. При последующих вызовах необходимо позвонить Refresh , чтобы получить последнюю копию информации.
В этом примере создаются выходные данные, аналогичные приведенному ниже.
См. также раздел
Свойства
Получает или задает атрибуты для текущего файла или каталога.
Получает или задает время создания текущего файла или каталога.
Получает или задает время создания текущего файла или каталога в формате UTC.
Получает экземпляр родительского каталога.
Получает строку, представляющую полный путь к каталогу.
Получает значение, показывающее, существует ли файл.
Возвращает часть расширения имени файла, включая начальную точку . даже если это имя файла целиком или пустая строка, если расширение отсутствует.
Получает полный путь к каталогу или файлу.
Возвращает или задает значение, позволяющее определить, является ли текущий файл доступным только для чтения.
Получает или задает время последнего доступа к текущему файлу или каталогу.
Получает или задает дату и время последнего доступа к заданному файлу или каталогу в формате всеобщего скоординированного времени (UTC).
Получает или задает время последней операции записи в текущий файл или каталог.
Получает или задает время последней операции записи в текущий файл или каталог в формате всеобщего скоординированного времени (UTC).
Получает размер текущего файла в байтах.
Получает целевой путь ссылки, расположенной в FullName, или null если этот FileSystemInfo экземпляр не представляет ссылку.
Получает имя файла.
Комментарии
Этот метод получает расширение path путем поиска path точки (.), начиная с последнего символа path и продолжая к первому символу. Если точка найдена до или DirectorySeparatorChar AltDirectorySeparatorChar символа, возвращаемая строка содержит точку и символы после нее; в противном случае String.Empty возвращается.
Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".
Для удобства обращения информация в запоминающих устройствах хранится в виде файлов.
Файл – именованная область внешней памяти, выделенная для хранения массива данных. Данные, содержащиеся в файлах, имеют самый разнообразный характер: программы на алгоритмическом или машинном языке; исходные данные для работы программ или результаты выполнения программ; произвольные тексты; графические изображения и т. п.
Каталог ( папка , директория ) – именованная совокупность байтов на носителе информации, содержащая название подкаталогов и файлов, используется в файловой системе для упрощения организации файлов.
Файловой системой называется функциональная часть операционной системы, обеспечивающая выполнение операций над файлами. Примерами файловых систем являются FAT (FAT – File Allocation Table, таблица размещения файлов), NTFS, UDF (используется на компакт-дисках).
Существуют три основные версии FAT: FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е. количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет (до 4 кбайт), FAT16 – для дисков малого объёма, FAT32 – для FLASH-накопителей большой емкости (до 32 Гбайт).
Рассмотрим структуру файловой системы на примере FAT32.
Читайте также: