Конспект лекций (C#)-unlocked. 1 Основные сведения о C# Особенности языка
Скачать 1.97 Mb.
|
Remove (T item) Удаляет из множества элемент со значением item и воз- вращает результат удаления типа bool ( true , если удале- ние произведено, и false в противном случае). Например: SortedSet 1 Примеры приводятся для класса SortedSet 120 Продолжение таблицы 7.7 Наименование Описание RemoveWhere (Predicate Удаляет из множества элементы, удовлетворяющие усло- вию match и возвращает количество удалённых элементов. Требуется реализация метода, проверяющего требуемое условие. Например: class MyClass : IComparable { public int value; public MyClass(int NewValue) { value = NewValue; } public static int V; public static bool Upper(MyClass Find) { return Find.value > V; } public int CompareTo(MyClass other) { return value - other.value; } } SortedSet MyClass.V = 4; int i = s.RemoveWhere(MyClass.Upper); // i = 2, s = {2, 3} i = s.RemoveWhere(MyClass.Upper); // i = 0, s = {2, 3} IntersectWith (IEnumerable Изменяет множество так, чтобы оно содержало только элементы, входящие в коллекцию other . Например: SortedSet SortedSet 121 Продолжение таблицы 7.7 Наименование Описание UnionWith (IEnumerable Изменяет множество так, чтобы оно содержало элементы, входящие как в множество, так и в коллекцию other Например: SortedSet SortedSet ExceptWith (IEnumerable Изменяет множество так, чтобы оно содержало элементы, не входящие в коллекцию other . Например: SortedSet SortedSet IsSubsetOf (IEnumerable Проверяет, является ли множество подмножеством коллек- ции other . Например: SortedSet SortedSet SortedSet 122 Продолжение таблицы 7.7 Наименование Описание IsSupersetOf (IEnumerable Проверяет, является ли множество надмножеством коллек- ции other . Например: SortedSet SortedSet SortedSet SetEquals (IEnumerable Проверяет, содержат ли множество и коллекция other только одинаковые элементы. Например: SortedSet SortedSet SortedSet SortedSet 7.4.7 Классы Dictionary Представляют собой словари пар «ключей-значений». Ключи в словаре долж- ны быть уникальными и не могут содержать значение null Если ключ представляет собой пользовательский тип, то требуется выполнить одно из двух действий: создать класс, реализующий интерфейс IEqualityComparer / IComparer и использовать объект этого класса при создании словаря для обеспечения сравнения ключей; реализовать перегрузку методов Equals и GetHashCode 123 Если значение представляет собой пользовательский тип, то требуется пере- грузка методов Equals и GetHashCode Порядок хранения пар в классе Dictionary не определён, в классе SortedDictionary – отсортированы по ключу. Некоторые члены классов приведены в таблице 7.8. Таблица 7.8 – Некоторые члены классов Dictionary и SortedDictionary Наименование Описание Count Возвращает количество пар в словаре [TKey key] Возвращает или задаёт значение, связанное с ключом key Если в словаре ещё нет ключа, которому присваивается значение, то производится добавление пары «ключ- значение». Если в словаре нет ключа, значение которого запрашивается, то возникает исключение. Например: Dictionary Add (TKey key, TValue value) Добавляет новую пару «ключ-значение» с ключом key и значением value в словарь. Если пара с таким ключом уже имеется, то возникает исключение. Например: Dictionary Remove (TKey key) Удаляет из словаря пару с ключом key . Возвращает значе- ние типа bool показывающее, было ли проведено удале- ние. Например: Dictionary Clear() Удаляет из словаря все пары. 124 Продолжение таблицы 7.8 Наименование Описание ContainsKey (TKey key) Определяет, есть ли в словаре пара с ключом key , и воз- вращает значение типа bool . Например: Dictionary ContainsValue (TValue value) Определяет, есть ли в словаре пара с значением value , и возвращает значение типа bool . Например: Dictionary TryGetValue (TKey key, out TValue value) Получает значение value для ключа key , если такой ключ существует, или значение по умолчанию, если ключ не су- ществует. Возвращает значение типа bool показывающее, был ли найден ключ. Например: Dictionary // b = true, s = "понедельник" b = d.TryGetValue(3, out s); // b = false, s = null 125 8 Работа с файлами Для работы с файлами C# предоставляет набор классов, обеспечивающих, как операции манипулирования файлами (например, копирование, удаление, открытие и т.д.), так и операции работы с данными, содержащимися в файле (чтение, запись). 8.1 Класс File Класс File предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объек- тов FileStream Класс расположен в пространстве имён System.IO По умолчанию всем пользователям предоставляется полный доступ к новым файлам с правом на чтение и запись. Однако для настройки некоторых методов класса могут использоваться перечисления, указанный в таблице 8.1. Таблица 8.1 – Перечисления, используемые для настройки методов класса File Наименование Назначение Значения FileMode Определяет режим работы с файлом CreateNew – создание нового файла. Если файл существует, то вызывается исключение; Create – создание нового файла. Если файл существует, то он перезаписывается; Open – открытие файла. Если файл не суще- ствует, то вызывается исключение; OpenOrCreate – открытие файла. Если файл не существует, то создаётся новый файл; Truncate – открытие файла и удаление из него всех данных; Append – открытие файла на дозапись. FileAccess Определяет доступные операции для файла Read – открытие файла для чтения; Write – открытие файла для записи; ReadWrite – открытие файла для чтения и за- писи. FileShare Определяет тип совместного доступа к файлу None – запрет доступа; Read – разрешает доступ к файлу для чтения; Write – разрешает доступ к файлу для записи; ReadWrite – разрешает доступ к файлу для чтения и для записи; Delete – разрешает доступ к файлу для удале- ния. 126 Некоторые члены класса File приведены в таблице 8.2. Таблица 8.2 – Некоторые члены класса File Наименование Описание Copy (string sourceFileName, string destFileName) Копирует файл sourceFileName в destFileName Delete (string path) Удаляет файл path Exists (string path) Возвращает true , если файл path существует, и false в противном случае Move (string sourceFileName, string destFileName) Перемещает или переименовывает файл sourceFileName в destFileName Replace (string sourceFileName, string destinationFileName, string destinationBackupFileName) Заменяет содержимое файла destinationFileName на содержимое файла sourceFileName создавая резервную копию destinationBackupFileName . Если копию создавать не требуется, то вместо третьего параметра указывается null Open (string path, FileMode mode [,FileAccess access [,FileShare share]]) Открывает файл path с требуемыми параметрами mode , access , share . Возвращает объект класса FileStream для работы с файлом Create (string path) Создает новый или перезаписывает существующий файл path . Возвращает объект класса FileStream для работы с файлом CreateText (string path) Создает новый или перезаписывает существующий файл path в кодировке UTF-8. Возвращает объект класса StreamWriter для записи в файл OpenRead (string path) Открывает файл path для чтения. Возвращает объект класса FileStream для чтения из файла OpenWrite (string path) Открывает файл path для записи. Возвращает объект класса FileStream для записи в файл OpenText (string path) Открывает файл path для чтения. Возвращает объект класса StreamReader , позволяющий читать данные из файла с текстом в кодировке UTF-8 AppendText (string path) Открывает файл path для дозаписи. Возвращает объект класса StreamWriter , позволяющий добавлять в существующий файл текст в кодировке UTF-8 127 Продолжение таблицы 8.2 Наименование Описание ReadAllText (string path) Возвращает строку, содержащую все строки файла path ReadAllLines (string path) Возвращает массив строк, содержащихсяв файле path ReadAllBytes (string path) Возвращает массив элементов класса byte , содержащихсяв файле path WriteAllText (string path, string contents) Создает новый файл path , записывает в него указанную строку contents и затем закрывает файл. Если файл уже существует, он будет перезаписан WriteAllLines (string path, string[] contents) Создает новый файл path , записывает в него массив строк contents и затем закрывает файл. Если файл уже существует, он будет перезаписан WriteAllBytes (string path, byte[] bytes) Создает новый файл path , записывает в него массив bytes и затем закрывает файл. Если файл уже существует, он будет перезаписан Выполнение операций осуществляется через класс, например: File.Copy(@"C:\Temp\1.txt",@"C:\Temp\2.txt"); File.Delete(@"C:\Temp\1.txt"); 8.2 Работа с файлами как с потоками Рассматривая выше класс File можно обратить внимание, что методы откры- тия или создания файла возвращают объекты других классов через которые осу- ществляется работа с данными, находящимися в файле. Все эти объекты представ- ляют собой потоки, работающие по единому принципу и рассматривающие файл как последовательность однотипных элементов, которыми можно манипулировать. Каждый поток знает свою длину и текущую позицию (в элементах потока), а также обеспечивает операции чтения и записи элементов в поток, закрытие потока. При каждой операции или записи текущая позиция в потоке меняется. При работе с потоками может использоваться ключевое слово using , обеспе- чивающее по окончании работы с потоком его закрытие. Его использование имеет следующую формальную структуру: using (<описание переменной и создание потока>) { <использование переменной для работы с потоком> } 128 Далее будут рассмотрены некоторые классы, обеспечивающие работу с фай- лами через потоки. 8.2.1 Класс FileStream Класс FileStream применяется для операций чтения и записи в файл, откры- тия и закрытия файлов в файловой системе. При этом, любой файл рассматривается как последовательность байт, т.е. не учитывается, содержит ли файл текст в некото- рой кодировке или двоичный код. Класс расположен в пространстве имён System.IO Некоторые методы класса FileStream приведены в таблице 8.3. Таблица 8.3 – Некоторые методы класса FileStream Наименование Описание FileStream (string path, FileMode mode [,FileAccess access [,FileShare share]]) Создание потока на основе файла path с указанными параметрами mode , access , share Close() Закрывает существующий поток Read (byte[] array, int offset, int count) Считывает из потока count или оставшееся количество байт, и размещает их в array начиная с позиции offset . Возвращает реально считанное количество байт ReadByte() Считывает один байт из потока и преобразует его к типу int . Если считывание не произошло, то возвращается -1 Write (byte[] array, int offset, int count) Записывает в поток count байт. Байты берутся из array начиная с позиции offset . Если значения count или offset указаны неверно (т.е. произойдет выход за границы массива), то запись не производится WriteByte (byte value) Записывает один байт value в поток Seek (long offset, SeekOrigin origin) Перемещает текущую позицию в потоке на offset байт относительно опорной точки, заданной в origin Опорная точка может быть: SeekOrigin.Begin – начало потока; SeekOrigin.End – конец потока; SeekOrigin.Current – текущее положение в пото- ке. Возвращается текущая позиция в потоке SetLength (long value) Устанавливает длину потока 129 Продолжение таблицы 8.3 Наименование Описание Length Возвращает длину потока в байтах Position Получение или изменение текущей позиции в потоке Name Возвращает имя, переданное в конструктор потока (имя файла) Пример: запись в файл чисел от 100 до 109 и последующее их чтение. Для преобразования между простыми типами и массивом байт используются методы класса BitConverter string path = "data.dat"; using (FileStream fs = File.Create(path)) { for (int i=100; i<110; i++) { byte[] info = BitConverter.GetBytes(i); fs.Write(info, 0, info.Length); } } using (FileStream fs = File.OpenRead(path)) { byte[] b = new byte[sizeof(int)]; listBox1.Items.Clear(); while (fs.Read(b, 0, b.Length) > 0) { int i = BitConverter.ToInt32(b,0); listBox1.Items.Add(i); } } StreamReader'>8.2.2 Класс StreamReader Класс StreamReader позволяет создавать объект, считывающий символы из потока в определённой кодировке, и применяемый для чтения строк из стандартного текстового файла. Класс расположен в пространстве имён System.IO В таблице 8.4 приведены некоторые члены данного класса. Таблица 8.4 – Некоторые члены класса StreamReader Наименование Описание StreamReader (Stream stream [,Encoding encoding]) Создает экземпляр класса из указанного потока stream . Используется кодировка по умолчанию или encoding 130 Продолжение таблицы 8.4 Наименование Описание StreamReader (string path [,Encoding encoding]) Создает экземпляр класса из указанного имени файла path . Используется кодировка по умолчанию или encoding Close() Закрывает существующий поток Peek() Возвращает преобразованное к int значение следующего символа, или -1, если символов больше нет. Позиция в потоке не меняется Read() Считывает один символ из потока и преобразует его к типу int . Если считывание не произошло, то возвращается -1 |