Главная страница
Навигация по странице:

  • 7.4.7 Классы Dictionary и SortedDictionary

  • Count Возвращает количество пар в словаре [

  • Clear ()Удаляет из словаря все пары. 124 Продолжение таблицы 7.8 Наименование Описание ContainsKey

  • Create (string path)Создает новый или перезаписывает существующий файл path. Возвращает объект класса FileStream для работы с файлом CreateText

  • OpenRead (string path)Открывает файл path для чтения. Возвращает объект класса FileStream для чтения из файла OpenWrite

  • OpenText (string path)Открывает файл path для чтения. Возвращает объект класса StreamReader, позволяющий читать данные из файла с текстом в кодировке UTF-8 AppendText

  • ReadAllText (string path)Возвращает строку, содержащую все строки файла pathReadAllLines

  • WriteAllLines (string path, string[]

  • WriteAllBytes (string path, byte[]

  • 8.2.1 Класс FileStream

  • Close () Закрывает существующий поток Read

  • ReadByte ()Считывает один байт из потока и преобразует его к типу int. Если считывание не произошло, то возвращается -1 Write

  • WriteByte (byte value)Записывает один байт value в поток Seek

  • SetLength (long value)Устанавливает длину потока 129 Продолжение таблицы 8.3 Наименование Описание Length

  • Position Получение или изменение текущей позиции в потоке Name Возвращает имя, переданное в конструктор потока (имя файла) Пример

  • 8.2.2 Класс StreamReader

  • StreamReader (string path [,Encoding encoding])Создает экземпляр класса из указанного имени файла path. Используется кодировка по умолчанию или encodingClose

  • Конспект лекций (C#)-unlocked. 1 Основные сведения о C# Особенности языка


    Скачать 1.97 Mb.
    Название1 Основные сведения о C# Особенности языка
    Дата15.01.2019
    Размер1.97 Mb.
    Формат файлаpdf
    Имя файлаКонспект лекций (C#)-unlocked.pdf
    ТипДокументы
    #63730
    страница12 из 13
    1   ...   5   6   7   8   9   10   11   12   13
    Remove
    (T item)
    Удаляет из множества элемент со значением item и воз- вращает результат удаления типа bool
    (
    true
    , если удале- ние произведено, и false в противном случае). Например:
    SortedSet s = new SortedSet(); bool b = s.Add(8); // b = true, s = {8} b = s.Add(5); // b = true, s = {5, 8} b = s.Remove(8); // b = true, s = {5} b = s.Remove(9); // b = false, s = {5}
    1
    Примеры приводятся для класса SortedSet

    120
    Продолжение таблицы 7.7
    Наименование
    Описание
    RemoveWhere
    (Predicate match)
    Удаляет из множества элементы, удовлетворяющие усло- вию 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 s = new SortedSet(); s.Add(new MyClass(5)); // s = {5} s.Add(new MyClass(2)); // s = {2, 5} s.Add(new MyClass(7)); // s = {2, 5, 7} s.Add(new MyClass(3)); // s = {2, 3, 5, 7}
    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)
    Изменяет множество так, чтобы оно содержало только элементы, входящие в коллекцию other
    . Например:
    SortedSet s1 = new SortedSet(); s1.Add(5); s1.Add(2); s1.Add(7); s1.Add(3); // s1 = {2, 3, 5, 7}
    SortedSet s2 = new SortedSet(); s2.Add(4); s2.Add(2); s2.Add(7); // s2 = {2, 4, 7} s1.IntersectWith(s2); // s1 = {2, 7}

    121
    Продолжение таблицы 7.7
    Наименование
    Описание
    UnionWith
    (IEnumerable other)
    Изменяет множество так, чтобы оно содержало элементы, входящие как в множество, так и в коллекцию other
    Например:
    SortedSet s1 = new SortedSet(); s1.Add(5); s1.Add(2); s1.Add(7); // s1 = {2, 5, 7}
    SortedSet s2 = new SortedSet(); s2.Add(4); s2.Add(9); s2.Add(7); // s2 = {4, 7, 9} s1.UnionWith(s2); // s1 = {2, 4, 5, 7, 9}
    ExceptWith
    (IEnumerable other)
    Изменяет множество так, чтобы оно содержало элементы, не входящие в коллекцию other
    . Например:
    SortedSet s1 = new SortedSet(); s1.Add(5); s1.Add(2); s1.Add(7); // s1 = {2, 5, 7}
    SortedSet s2 = new SortedSet(); s2.Add(4); s2.Add(7); // s2 = {4, 7} s1.ExceptWith(s2); // s1 = {2, 5}
    IsSubsetOf
    (IEnumerable other)
    Проверяет, является ли множество подмножеством коллек- ции other
    . Например:
    SortedSet s1 = new SortedSet(); s1.Add(5); s1.Add(2); // s1 = {2, 5}
    SortedSet s2 = new SortedSet(); s2.Add(2); s2.Add(7); s2.Add(5); // s2 = {2, 5, 7}
    SortedSet s3 = new SortedSet(); s2.Add(2); s2.Add(7); s2.Add(4); // s3 = {2, 4, 7} bool b = s1.IsSubsetOf(s2); // b = true b = s1.IsSubsetOf(s3); // b = false

    122
    Продолжение таблицы 7.7
    Наименование
    Описание
    IsSupersetOf
    (IEnumerable other)
    Проверяет, является ли множество надмножеством коллек- ции other
    . Например:
    SortedSet s1 = new SortedSet(); s1.Add(5); s1.Add(2); s1.Add(7); // s1 = {2, 5, 7}
    SortedSet s2 = new SortedSet(); s2.Add(2); s2.Add(5); // s2 = {2, 5}
    SortedSet s3 = new SortedSet(); s3.Add(2); s3.Add(4); // s3 = {2, 4} bool b = s1.IsSupersetOf(s2); // b = true b = s1.IsSupersetOf(s3); // b = false
    SetEquals
    (IEnumerable other)
    Проверяет, содержат ли множество и коллекция other только одинаковые элементы. Например:
    SortedSet s1 = new SortedSet(); s1.Add(5); s1.Add(2); // s1 = {2, 5}
    SortedSet s2 = new SortedSet(); s2.Add(2); s2.Add(5); // s2 = {2, 5}
    SortedSet s3 = new SortedSet(); s3.Add(2); // s3 = {2}
    SortedSet s4 = new SortedSet(); s4.Add(2); s4.Add(5); s4.Add(7); // s4 = {2, 5, 7} bool b = s1.SetEquals(s2); // b = true b = s1.SetEquals(s3); // b = false b = s1.SetEquals(s4); // b = false
    7.4.7
    Классы Dictionary и SortedDictionary
    Представляют собой словари пар «ключей-значений». Ключи в словаре долж- ны быть уникальными и не могут содержать значение null
    Если ключ представляет собой пользовательский тип, то требуется выполнить одно из двух действий:

    создать класс, реализующий интерфейс
    IEqualityComparer
    /
    IComparer
    и использовать объект этого класса при создании словаря для обеспечения сравнения ключей;

    реализовать перегрузку методов
    Equals и
    GetHashCode

    123
    Если значение представляет собой пользовательский тип, то требуется пере- грузка методов
    Equals и
    GetHashCode
    Порядок хранения пар в классе
    Dictionary
    не определён, в классе
    SortedDictionary
    – отсортированы по ключу.
    Некоторые члены классов приведены в таблице 7.8.
    Таблица 7.8 – Некоторые члены классов
    Dictionary
    и
    SortedDictionary
    Наименование
    Описание
    Count
    Возвращает количество пар в словаре
    [TKey key]
    Возвращает или задаёт значение, связанное с ключом key
    Если в словаре ещё нет ключа, которому присваивается значение, то производится добавление пары «ключ- значение». Если в словаре нет ключа, значение которого запрашивается, то возникает исключение. Например:
    Dictionary d = new Dictionary(); d[1] = "понедельник"; // d.Count = 1 d[2] = "вторник"; // d.Count = 2 d[1] = "среда"; // d.Count = 2 string s = d[3]; // Исключение
    Add
    (TKey key,
    TValue value)
    Добавляет новую пару «ключ-значение» с ключом key и значением value в словарь. Если пара с таким ключом уже имеется, то возникает исключение. Например:
    Dictionary d = new Dictionary(); d.Add(1, "понедельник"); d.Add(2, "вторник"); d.Add(1, "среда"); // Исключение
    Remove
    (TKey key)
    Удаляет из словаря пару с ключом key
    . Возвращает значе- ние типа bool показывающее, было ли проведено удале- ние. Например:
    Dictionary d = new Dictionary(); d.Add(1, "понедельник"); d.Add(2, "вторник"); bool b = d.Remove(1); // b = true, d.Count = 1 b = d.Remove(1); // b = false, d.Count = 1
    Clear()
    Удаляет из словаря все пары.

    124
    Продолжение таблицы 7.8
    Наименование
    Описание
    ContainsKey
    (TKey key)
    Определяет, есть ли в словаре пара с ключом key
    , и воз- вращает значение типа bool
    . Например:
    Dictionary d = new Dictionary(); d.Add(1, "понедельник"); d.Add(2, "вторник"); bool b = d.ContainsKey(1); // b = true b = d.ContainsKey(3); // b = false
    ContainsValue
    (TValue value)
    Определяет, есть ли в словаре пара с значением value
    , и возвращает значение типа bool
    . Например:
    Dictionary d = new Dictionary(); d.Add(1, "понедельник"); d.Add(2, "вторник"); bool b = d.ContainsValue("вторник"); // b = true b = d.ContainsValue("среда"); // b = false
    TryGetValue
    (TKey key, out TValue value)
    Получает значение value для ключа key
    , если такой ключ существует, или значение по умолчанию, если ключ не су- ществует. Возвращает значение типа bool показывающее, был ли найден ключ. Например:
    Dictionary d = new Dictionary(); d.Add(1, "понедельник"); d.Add(2, "вторник"); string s; // s = null bool b = d.TryGetValue(1,out s);
    // 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
    1   ...   5   6   7   8   9   10   11   12   13


    написать администратору сайта