Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Введите несколько символов, а по окончании -
.
а Вы нажали клавишу: а
b Вы нажали клавишу: b
d Вы нажали клавишу: d
А Вы нажали клавишу: А
Нажата клавиша .
В Вы нажали клавишу: В
Нажата клавиша .
С Вы нажали клавишу: С
Нажата клавиша .
• Вы нажали клавишу: •
Нажата клавиша .
Q Вы нажали клавишу: Q
Нажата клавиша .
Как следует из приведенного выше результата, всякий раз, когда нажимается клавиша, метод
ReadKey()
немедленно возвращает введенный с клавиатуры символ. Этим он отличается от упоминавшегося ранее метода Read()
, в котором ввод выполняется с построчной буферизацией. Поэтому если требуется добиться в программе реакции на ввод с клавиатуры, то рекомендуется выбрать метод ReadKey()
.
Запись данных в поток вывода на консоль
Потоки
Console.Out
и Console.Error
являются объектами типа TextWriter
. Вывод на консоль проще всего осуществить с помощью методов Write()
и WriteLine()
, с которыми вы уже знакомы. Существуют варианты этих методов для вывода данных каждого из встроенных типов. В классе Console определяются его собственные варианты метода Write()
и WriteLine()
, и поэтому они могут вызываться непосредственно для класса Console, как это было уже не раз показано на страницах данной книги. Но при желании эти и другие методы могут быть вызваны и для класса TextWriter, который является базовым для потоков Console.Out
и Console.Err
or.
Ниже приведен пример программы, в котором демонстрируется вывод в потоки
Console.Out
и Console.Error
. По умолчанию данные в обоих случаях выводятся на консоль.
// Организовать вывод в потоки Console.Out и Console.Error.
using System;
class ErrOut {
static void Main() {
int a=10, b=0;
int result;
Console.Out.WriteLine("Деление на нуль приведет " +
"к исключительной ситуации.");
try {
result = a / b; // сгенерировать исключение при попытке деления на нуль
} catch(DivideByZeroException exc) {
Console.Error.WriteLine(exc.Message);
}
}
}
При выполнении этой программы получается следующий результат.
Деление на нуль приведет к исключительной ситуации.
Попытка деления на нуль.
Начинающие программисты порой испытывают затруднения при использовании потока
Console.Error
. Перед ними невольно встает вопрос: если оба потока, Console.Out
и Console.Error
, по умолчанию выводят результат на консоль, то зачем нужны два разных потока вывода? Ответ на этот вопрос заключается в том, что стандартные потоки могут быть переадресованы на другие устройства. Так, поток Console.Error
можно переадресовать в выходной файл на диске, а не на экран. Это, например, означает, что сорбщения об ошибках могут быть направлены в файл журнала регистрации, не мешая выводу на консоль. И наоборот, если вывод на консоль переадресуется, а вывод сообщений об ошибках остается прежним, то на консоли появятся сообщения об ошибках, а не выводимые на нее данные. Мы еще вернемся к вопросу переадресации после рассмотрения файлового ввода-вывода.
Класс FileStream и байтовый ввод-вывод в файл
В среде .NET Framework предусмотрены классы для организации ввода-вывода в файлы. Безусловно, это в основном файлы дискового типа. На уровне операционной системы файлы имеют байтовую организацию. И, как следовало ожидать, для ввода и вывода байтов в файлы имеются соответствующие методы. Поэтому ввод и вывод в файлы байтовыми потоками весьма распространен. Кроме того, байтовый поток ввода или вывода в файл может быть заключен в соответствующий объект символьного потока. Операции символьного ввода-вывода в файл находят применение при обработке текста. О символьных потоках речь пойдет далее в этой главе, а здесь рассматривается байтовый ввод-вывод.
Для создания байтового потока, привязанного к файлу, служит класс
FileStream
. Этот класс является производным от класса Stream
и наследует всего его функции.
Напомним, что классы потоков, в том числе и
FileStream
, определены в пространстве имен System.IO
. Поэтому в самом начале любой использующей их программы обычно вводится следующая строка кода.
using System.IO;
Открытие и закрытие файла
Для формирования байтового потока, привязанного к файлу, создается объект класса
FileStream
. В этом классе определено несколько конструкторов. Ниже приведен едва ли не самый распространенный среди них:
FileStream(string путь, FileMode режим)
где путь обозначает имя открываемого файла, включая полный путь к нему; а режим — порядок открытия файла. В последнем случае указывается одно из значений, определяемых в перечислении
FileMode
и приведенных в табл. 14.4. Как правило, этот конструктор открывает файл для доступа с целью чтения или записи. Исключением из этого правила служит открытие файла в режиме FileMode.Append
, когда файл становится доступным только для записи.
Таблица 14.4. Значения из перечисления FileMode
FileMode.Append- Добавляет выводимые данные в конец файла
FileMode.Create- Создает новый выходной файл. Существующий файл с таким же именем будет разрушен
FileMode.CreateNew- Создает новый выходной файл. Файл с таким же именем не должен существовать
FileMode.Open - Открывает существующий файл
FileMode.OpenOrCreate- Открывает файл, если он существует. В противном случае создает новый файл
FileMode.Truncate- Открывает существующий файл, но сокращает его длину до нуля
Если попытка открыть файл оказывается неудачной, то генерируется исключение. Если же файл нельзя открыть из-за того что он не существует, генерируется исключение
FileNotFoundException
. А если файл нельзя открыть из-за какой-нибудь ошибки ввода-вывода, то генерируется исключение IOException
. К числу других исключений, которые могут быть сгенерированы при открытии файла, относятся следующие: ArgumentNullException
(указано пустое имя файла), ArgumentException
(указано неверное имя файла), ArgumentOutOfRangeException
(указан неверный режим), SecurityException
(у пользователя нет прав доступа к файлу), PathTooLongException
(слишком длинное имя файла или путь к нему), NotSupportedException
(в имени файла указано устройство, которое не поддерживается), а также DirectoryNotFoundException
(указан неверный каталог).
Интервал:
Закладка: