Высокоуровневые методы информатики и программирования Лекция 17

advertisement
Высокоуровневые методы
информатики и
программирования
Лекция 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
Services
Description
UI
HtmlControls
Discovery
WebControls
System.Windows.Forms
Form
Protocols
ComponentModel
System.Drawing
Caching
Security
Drawing2D
Printing
Configuration
SessionState
Imaging
Text
System.Data
System.Xml
ADO
SQL
XSLT
Design
SQLTypes
XPath
Serialization
System
Collections
IO
Security
Configuration
Net
ServiceProcess
Runtime
InteropServices
Diagnostics
Reflection
Text
Remoting
Globalization
Resources
Threading
Serialization
Пространство имен 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.OperatingSystem OSVersion { get; } – получение
информации об установленной ОС;
– string UserName { get; } – имя работающего пользователя;
– string CurrentDirectory { get; set; } – определить или задать текущий
каталог.
• Методы
– Получить список названий логических устройств компьютера,
например A:\ или C:\ :
string[] GetLogicalDrivers()
– Посмотреть пути к специальным папкам:
string[] GetFolderPath(Environment.SpecialFolder.xxx)
Перечисление
Environment.SpecialFolder
Класс DriveInfo
•
•
Основные элементы класса:
Конструктор
public DriveInfo(string driveName)
•
•
Статический метод GetLogicalDrives() – возвращает массив объектов типа
DriveInfo с возможностью получения дополнительной информации о дисках
компьютера.
Свойства
–
–
•
–
–
–
–
Name – строка с названием драйвера;
DriveType – тип драйвера (перечисление System.IO.DriveType {CDRom, Fixed, Network,
NoRootDirectory, Ram, Removable, Unknown});
RootDirectory – объект класса System.IO.DirectoryInfo;
bool IsReady – готовность устройства к работе;
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 предоставляю
возможность создать объект класса
для работы с конкретным каталогом.
Классы Directory и File
Основные члены типа DirectoryInfo
• GetDirectories() – получает массив строк,
представляющих все подкаталоги текущего каталога.
• GetFiles() – получает массив типов FileInfo,
представляющих множество файлов данного каталога.
• Create() – создает каталог (или множество
подкаталогов) в соответствии с заданным именем
пути.
• Delete() – удаляет каталог и все его содержимое.
• MoveTo() – перемещает каталог и его содержимое в
место, соответствующее заданному новому пути.
• Parent – получить каталог родителя указанного пути.
• Root – получить корневую часть пути.
Методы классов DirectoryInfo
• Конструктор:DirectoryInfo(“путь к каталогу”)
Например:
DirectoryInfo dir1 = new DirectoryInfo(@“C:\Windows”);
DirectoryInfo dir2 = 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 (int i = 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);
// удаление файла
DateTime dt = File.GetCreationTime(string FileName);
•
System.IO.FileInfo предоставляю возможность создать объект класса
для работы с файлами
FileInfo fi = FileInfo(FileName1); // создание объекта
fi.Copy(FileName2);
// копирование файла
fi.MoveTo(FileName2); // перемещение файла
fi.Delete();
// удаление файла
DateTime dt = 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 International Standards Organization) создала новый стандарт кодировки символов,
названный Latin-1, который содержал европейские символы, не вошедшие в набор ASCII.
Microsoft расширила Latin-1 и назвала этот стандарт ANSI. Но ANSI по-прежнему осталась
8-битной кодировкой, которая может представлять только 256 уникальных символов.
Многие языки имеют тысячи символов, особенно азиатские языки, такие как китайский,
корейский и японский.
•
Для преодоления ограничений стандарта на 8-битную кодировку символов, Microsoft в
сотрудничестве с такими компаниями, как Apple Computer, 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 – национальные алфавиты (для нас - кириллица)
•
Например:
Символ
Код
$
36
*
42
A
65
B
66
a
97
b
98
1
49
2
50
ASCII – первая таблица (0-127)
0
1
2
3
4
5
6
7
8
9
0
nul
soh
stx
etx
eot
enq
ack
bel
bs
ht
1
nl
vt
np
cr
so
si
dle
dc1
dc2
dc3
2
dc4
nak
syn
etb
can
em
sub
esc
fs
gs
3
rs
us
sp
!
“
#
$
%
&
‘
4
(
)
*
+
,
-
.
/
0
1
5
2
3
4
5
6
7
8
9
:
;
6
<
=
>
?
@
A
B
C
D
E
7
F
G
H
I
J
K
L
M
N
O
8
P
Q
R
S
T
U
V
W
X
Y
9
Z
[
\
]
^
_
‘
a
b
C
10
d
e
f
g
h
i
j
k
l
M
o
p
q
r
s
t
u
v
W
y
z
{
|
}
~
del
11
12
n
x
ASCII – вторая таблица (128 - 255)
.0
.1
.2
.3
.4
.5
.6
8.
Ђ
402
Ѓ
403
‚
201A
ѓ
453
„
201E
…
2026
†
2020
9.
ђ
452
‘
2018
’
“
”
•
2019 201C 201D 2022
A0
Ў
40E
ў
45E
Ј
408
¤
A4
B.
°
B0
±
B1
І
406
і
456
C.
А
410
Б
411
В
412
D.
Р
420
С
421
E.
а
430
F.
р
440
A.
.7
.8
.9
.A
.B
.C
.D
.E
.F
‡
€
‰
2021 20AC 2030
Љ
409
‹
2039
Њ
40A
Ќ
40C
Ћ
40B
Џ
40F
–
2013
—
2014
™
2122
љ
459
›
203A
њ
45A
ќ
45C
ћ
45B
џ
45F
Ґ
490
¦
A6
§
A7
Ё
401
©
A9
Є
404
«
AB
¬
AC
AD
®
AE
Ї
407
ґ
491
µ
B5
¶
B6
·
B7
ё
451
№
2116
є
454
»
BB
ј
458
Ѕ
405
ѕ
455
ї
457
Г
413
Д
414
Е
415
Ж
416
З
417
И
418
Й
419
К
41A
Л
41B
М
41C
Н
41D
О
41E
П
41F
Т
422
У
423
Ф
424
Х
425
Ц
426
Ч
427
Ш
428
Щ
429
Ъ
42A
Ы
42B
Ь
42C
Э
42D
Ю
42E
Я
42F
б
431
в
432
г
433
д
434
е
435
ж
436
з
437
и
438
й
439
к
43A
л
43B
м
43C
н
43D
о
43E
п
43F
с
441
т
442
у
443
ф
444
х
445
ц
446
ч
447
ш
448
щ
449
ъ
44A
ы
44B
ь
44C
э
44D
ю
44E
я
44F
Вспомогательный класс Encoding
• Класс, описывающий используемую
систему кодирования символов
• Для создания объектов могут
использоваться статические свойства
–
–
–
–
–
Encoding.Unicode
Encoding.BigEndianUnicode
Encoding.UTF8
Encoding.UTF7
Encoding.ASCII
• Позволяет выполнять преобразования
между кодировками.
Основные методы для работы с
текстовыми файлами
• Методы класса System.IO.StreamWriter
– Write(…) – метод записи строки в файл
– WriteLine(…) – метод записи строки в файл и переход к
новой строке
– NewLine – свойство для задания символов возврата
каретки, за которой следует символ окончания строки
(\r\n).
– void Flush() – метод вывода содержимого буфера на диск;
– void Close() – метод закрытия файла.
• Методы класса System.IO.StreamReader
– string ReadLine() – метод чтения одной строки файла;
– string ReadToEnd() – метод чтения всех строк файла
до конца;
– void Close() – метод закрытия файла.
Доля кодировки Unicode в Web-cети
• Доля кодировки Unicode в интернет-документах приблизилась к 50
процентам (30.01.2010). Об этом говорится в записи в блоге Google. Для
расчетов компания, давно перешедшая на Unicode, использовала
данные собственного поискового индекса.
• Unicode впервые обогнал все другие кодировки в мае 2008 года. Тогда
его доля составляла около 25 процентов, как и доли ASCII- и
западноевропейской кодировок.
• В 2001 году доля ASCII-кодировки составляла около 55 процентов.
Сейчас она снизилась до 20.
• Доли других популярных национальных кодировок, в том числе и
распространенной в России CP-1251 не превышают десяти, а чаще и
пяти процентов.
• Многобайтовый стандарт кодирования символов Unicode позволяет
использовать символы тысяч национальных алфавитов и представить
знаки практически всех письменных языков, в то время как обычные
кодировки ограничиваются поддержкой максимум нескольких десятков
языков и нескольких алфавитов.
Download