340 likes | 630 Views
Высокоуровневые методы информатики и программирования Лекция 17 Работа с файловой системой. План работы. Основные понятия файловой системы Структура файла Класс Environment Класс Dr ive Info Классы Directory и DirectoryInfo Классы File и File Info Системы кодирования символов.
E N D
Высокоуровневые методы информатики и программированияЛекция 17Работа с файловой системой
План работы • Основные понятия файловой системы • Структура файла • Класс Environment • Класс DriveInfo • Классы Directory и DirectoryInfo • Классы File и FileInfo • Системы кодирования символов
Упрощенная схема работы программы Файлы с данными Файлы с данными Программа пользователь
Способ хранения данных Способы хранения данных • В файлах собственной структуры • В файлах базы данных База данных – специальный способ хранения данных, который имеет: • Структуру данных (модели данных) – сетевые, реляционные, объектные; • Специальные программы доступа к данным в базе данных - СУБД; • Универсальный язык общения с реляционными базами данных – SQL.
Основные понятия • Устройство – driver: • Физические (жесткие диски, флэш память, CD и т.п.) • Логические – “C:”, “D:”, … . • Папка (каталог) – directory (folder). • Файл – file.
Работа с файлами • Файловая система – часть операционной системы обеспечивающая хранение данных на внешних устройствах. • Данные хранятся на внешних устройствах (drives, devices) • Единица хранения – файл (file). • Файл имеет набор атрибутов и содержание (данные) • Файлы содержатся в каталогах (directory), папках (folder). • Каталог может также содержать файлы и другие каталоги (подкаталоги - subdirectory).
Структура файла • Атрибуты: • File • FileInfo Атрибуты • Содержание: • FileStream • StreamReader • StreamWriter • BynaryReader • BynaryWriter Данные
Библиотека FCL (Framework Class Library) System.Web System.Windows.Forms Services UI Form ComponentModel Description HtmlControls Discovery WebControls Protocols System.Drawing Caching Security Drawing2D Printing Text Configuration SessionState Imaging System.Data System.Xml ADO SQL XSLT Serialization Design SQLTypes XPath System Collections IO Security Runtime InteropServices Configuration Net ServiceProcess Remoting Diagnostics Reflection Text Serialization Globalization Resources Threading
Пространство имен System.IO • Средства файлового ввода-вывода – набор классов, интерфейсов, структур, перечислений и делегатов. • Задачей многих типов пространства System.IO – программная поддержка физических операций с каталогами и файлами. • Содержится в компонентах: • mscorlib.dll (Component Object Runtime Library) – множество базовых типов для решения широкого спектра задач программирования; • System.dll – множество полезных типов, математические вычисления, обработка исключений
Классы для работы с файловой системой • Вспомогательные • Environment (System) • DriveInfo (System.IO) • Для работы с директориями • Directory • DirectoryInfo • Для работы с файлами • Для работы с файлами в целом (атрибутами) • File • FileInfo • Для работы с содержанием файлов • FileStream • StreamReaderи StreamWriter • BinaryReaderи BinaryWriter
Статический класс Environment • Свойство • string MachineName { get; } – имя компьютера; • System.OperatingSystemOSVersion { get; } – получение информации об установленной ОС; • string UserName { get; } – имя работающего пользователя; • string CurrentDirectory { get; set; } – определить или задать текущий каталог. • Методы • Получить список названий логических устройств компьютера, например A:\ или C:\: string[] GetLogicalDrivers() • Посмотреть пути к специальным папкам: string[] GetFolderPath(Environment.SpecialFolder.xxx)
Класс DriveInfo • Основные элементы класса: • Конструктор public DriveInfo(string driveName) • Статический метод GetLogicalDrives() – возвращает массив объектов типа DriveInfoс возможностью получения дополнительной информации о дисках компьютера. • Свойства • Name – строка с названием драйвера; • DriveType – тип драйвера (перечисление System.IO.DriveType{CDRom, Fixed, Network, NoRootDirectory, Ram, Removable, Unknown}); • RootDirectory – объект класса System.IO.DirectoryInfo; • boolIsReady – готовность устройства к работе; • long TotalSize – общий размер памяти; • long TotalFreeSpace – количество свободной памяти; • string VolumeLabel { get; set; } – текстовая метка драйвера. • Пример использования: DriveInfo[ ] myDrives = DriveInfo. GetDrives(); foreach(DriveInfo d in myDrive) { Console.WriteLine(“Имя: {0}”, d.Name); Console.WriteLine(“Тип: {0}”, d.DriveType); }
Классы для работы с каталогами (папками) • System.IO.Directoryпредоставляет статические методы для работы с директориями • System.IO.DirectoryInfoпредоставляю возможность создать объект класса для работы с конкретным каталогом.
Основные члены типа DirectoryInfo • GetDirectories() – получает массив строк, представляющих все подкаталоги текущего каталога. • GetFiles() – получает массив типов FileInfo, представляющих множество файлов данного каталога. • Create() – создает каталог (или множество подкаталогов) в соответствии с заданным именем пути. • Delete() – удаляет каталог и все его содержимое. • MoveTo() – перемещает каталог и его содержимое в место, соответствующее заданному новому пути. • Parent – получить каталог родителя указанного пути. • Root – получить корневую часть пути.
Методы классов DirectoryInfo • Конструктор:DirectoryInfo(“путь к каталогу”) Например: DirectoryInfodir1 = new DirectoryInfo(@“C:\Windows”); DirectoryInfodir2 = new DirectoryInfo(“.”); • System.IO.DirectoryInfoпредставляет каталог • GetDirectories([mask]) получить подкаталоги • GetFiles([mask])получить содержащиеся файлы
Пример – работа со списком названий каталогов string[ ] folders; folders = System.IO.Directory.GetDirectories(@"c:\"); for (int i = 0; i < folders.Length; i++) Console.WriteLine(folders[i]);
Пример – работа со списком названий файлов using System.IO; . . . string[ ] fls; fls = Directory.GetFiles(@"C:\", "p*.*"); for (inti = 0; i < fls.Length; i++) Console.WriteLine(fls[i]);
Классы для работы с файлами • System.IO.Fileпредоставляют статические методы для работы с файлами • System.IO.FileInfoпредоставляю возможность создать объект класса для работы с файлами • может быть построен заданием пути в конструкторе • Может быть получен из перечисления GetFiles()
Методы классов для работы с файлами • System.IO.Fileпредоставляют статические методы для работы с файлами File.Copy(FileName1, FileName2);// копирование файла File.MoveTo(FileName1, FileName2);// перемещение фала File.Delete(FileName1);// удаление файла DateTimedt = File.GetCreationTime(string FileName); • System.IO.FileInfoпредоставляю возможность создать объект класса для работы с файлами FileInfofi = FileInfo(FileName1); // создание объекта fi.Copy(FileName2);// копирование файла fi.MoveTo(FileName2);// перемещение файла fi.Delete();// удаление файла DateTimedt = fi.GetCreationTime();// определение даты создания
Основные свойства абстрактного базового класса FileSystemInfo • Attributes – получение или задание атрибутов текущего файла, которые представляются перечислением FileAttributes. • CreationTime – получение или задание времени создания текущего файла или директории. • Exists – проверка, существует ли заданный файл или директория. • Extension – получения расширения имени файла • FullName – получение полного пути к файлу или директории • LastAccessTime – получение или задание времени последнего обращения к файлу • LastWriteTime – получение или задание времени последней корректировки файла • Name – получение имени текущего файла или директории.
Основные методы класса DirectoryInfo • Create(), CreateSubdirectory() – создание директории (или набора поддиректорий) с заданными именами. • Delete() – удаление директории и всего ее содержания. • GetDirectories() – получение массива строк с названия поддиректорий. • GetFiles() – получение массива экземпляров класса FileInfo, которые соответствуют набору файлов заданной директории.
Основные методы класса FileInfo • CopyTo() – копирование существующего файла в новый файл. • MoveTo() – перемещение текущего файла на новое место и с новым именем. • Delete() – удаление файла, с которым выполняется работа. • DirectoryName– получение имени родительской директории. • Length – получение размера текущего файла. • Name – получение имени файла. • Directory– получение экземпляра родительской директории.
Системы кодированиясимволов • ASCII – используется 7 бит; • ANSI – используется 1байт; • Unicode – используются 2 байта • BigEndianUnicode; • Little-endian architecture. • UTF8 – 1 байт (удаление первого байта в Unicode); • UTF7– используется семь битов для символа (E-mail).
Кодирование символов • Первой известной кодировкой символов была кодировка ASCII, и она используется до сих пор. В ASCII-кодировке каждый символ занимает 8 бит, или один байт. Из-за того, что ASCII была предназначена для западных языков, ее использование было ограничено в европейских странах и регионах, чьи языки содержали символы, не включенные в 256 символов, поддерживаемых ASCII. • Чтобы обойти это ограничение, Международная организация по стандартизации (ISO - InternationalStandardsOrganization) создала новый стандарт кодировки символов, названный Latin-1, который содержал европейские символы, не вошедшие в набор ASCII. • Microsoft расширила Latin-1 и назвала этот стандарт ANSI. Но ANSI по-прежнему осталась 8-битной кодировкой, которая может представлять только 256 уникальных символов. Многие языки имеют тысячи символов, особенно азиатские языки, такие как китайский, корейский и японский. • Для преодоления ограничений стандарта на 8-битную кодировку символов, Microsoft в сотрудничестве с такими компаниями, как AppleComputer, Inc., и IBM, создала некоммерческий консорциум Unicode, Inc., целью которого стало определение нового стандарта на кодировку символов для международных наборов символов. Работа, проделанная в Unicode, была объединена с работой, которая велась в ISO, и результатом стал стандарт Unicode для кодировки символов. • Unicode является 16-разрядным стандартом, что обеспечивает 65 536 уникальных символов - более чем достаточно для представления всех языков мира. Он поддерживает даже архаические языки, такие как санскрит и египетские иероглифы, и включает знаки препинания, математические и графические символы. • Родной кодировкой для OC Windows XP/Vista/7 является Unicode, но она поддерживает и ANSI. Внутри себя операционная система представляет имена объектов, пути и имена файлов в виде 16-битовых символов Unicode. Она также обычно использует Unicode для хранения данных в реестре.
American Standard Code for Information Interchange - ASCII • ASCII изначально предназначался для обмена информацией по телетайпу, в нём, кроме информационных символов, используются символы-команды для управления связью. Это обычный набор спецсигналов, применявшийся и в других до компьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), дополненный с учётом специфики устройства. • Две таблицы • первая таблица с 0 до 127 – латинский алфавит • вторая таблица с 128 до 255 – национальные алфавиты (для нас - кириллица) • Например:
Вспомогательный класс Encoding • Класс, описывающий используемую систему кодирования символов • Для создания объектов могут использоваться статические свойства • Encoding.Unicode • Encoding.BigEndianUnicode • Encoding.UTF8 • Encoding.UTF7 • Encoding.ASCII • Позволяет выполнять преобразования между кодировками.
Основные методы для работы с текстовыми файлами • Методы класса System.IO.StreamWriter • Write(…) – метод записи строки в файл • WriteLine(…) – метод записи строки в файли переход к новой строке • NewLine– свойство для задания символов возврата каретки, за которой следует символ окончания строки (\r\n). • voidFlush() – метод вывода содержимого буфера на диск; • void Close() – метод закрытия файла. • Методы класса System.IO.StreamReader • stringReadLine()– метод чтения одной строки файла; • stringReadToEnd()– метод чтения всех строк файла до конца; • void Close() – метод закрытия файла.
Доля кодировки Unicode в Web-cети • Доля кодировки Unicode в интернет-документах приблизилась к 50 процентам(30.01.2010). Об этом говорится в записи в блогеGoogle. Для расчетов компания, давно перешедшая на Unicode, использовала данные собственного поискового индекса. • Unicode впервые обогнал все другие кодировки в мае 2008 года. Тогда его доля составляла около 25 процентов, как и доли ASCII- и западноевропейской кодировок. • В 2001 году доля ASCII-кодировки составляла около 55 процентов. Сейчас она снизилась до 20. • Доли других популярных национальных кодировок, в том числе и распространенной в России CP-1251 не превышают десяти, а чаще и пяти процентов. • Многобайтовый стандарт кодирования символов Unicode позволяет использовать символы тысяч национальных алфавитов и представить знаки практически всех письменных языков, в то время как обычные кодировки ограничиваются поддержкой максимум нескольких десятков языков и нескольких алфавитов.