Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
BinaryReader
и BinaryWriter
. Эти классы в действительности сами не реализуют потоки, но они могут обеспечить оболочки вокруг других потоковых объектов. BinaryReader
и BinaryWriter
поддерживают дополнительное форматирование двоичных данных, что позволяет напрямую читать или записывать содержимое переменных C# в соответствующий поток. Проще всего считать, что BinaryReader
и BinaryWriter
находятся между потоком и кодом приложения, обеспечивая дополнительное форматирование:

Различие между использованием этих классов и непосредственным использованием описанных ниже потоковых объектов состоит в том, что базовый поток работает с байтами. Например, пусть часть процесса сохранения некоторого документа состоит в записи содержимого переменной типа long
в двоичный файл. Каждая переменная типа long
занимает 8 байтов, если используется плоский обыкновенный двоичный поток, необходимо будет явно записывать каждые эти 8 байтов памяти. В коде C# это будет означать, что необходимо явно выполнять некоторые битовые операции для извлечения каждых 8 байтов из значения long
. Используя экземпляр BinaryWriter
, можно инкапсулировать всю операцию в перегруженный метод BinaryWriter.Write()
, который получает long
в качестве параметра и который будет помещать эти 8 байтов в поток (и следовательно, если поток направлен в файл, то в файл). Соответствующий метод BinaryReader.Read()
будет извлекать 8 байтов из потока и восстанавливать значение long
.
BufferedStream
. По соображениям производительности при чтении из файла или при записи в файл вывод буферизуется. Это означает, что если программа запрашивает следующие 2 байта файлового потока и поток передает запрос Windows, то Windows не станет соединяться с файловой системой и затем искать и считывать файл с диска, для того чтобы получить 2 байта. Вместо этого произойдет извлечение большого блока файла за один раз и сохранение этого блока в области памяти, называемой буфером.Последующие запросы данных из потока будут удовлетворяться из буфера, пока он не будет исчерпан, и тогда Windows извлечет другой блок данных из файла. Запись в файлы работает таким же образом. Для файлов это делается автоматически операционной системой, но возможен случай, когда придется написать потоковый класс для чтения из некоторого другого устройства, которое не буферизуется. В таком случае можно вывести этот класс из BufferedStream
, который сам реализует буфер ( BufferedStream
не создан, однако, для ситуаций, когда приложение часто чередует операции чтения и записи данных).
Чтение и запись двоичных файлов
Чтение и запись двоичных файлов делается обычно с помощью класса FileStream
.
Класс FileStream
Экземпляр FileStream
используется для чтения или записи данных файла. Чтобы создать FileStream
, необходимо иметь данные четырех видов:
□ Файлдля доступа.
□ Режим,который указывает, как необходимо открыть файл. Например, собираетесь ли вы создать новый файл или открыть существующий файл, и, если открывается существующий файл, должна ли какая-либо операция записи интерпретироваться как перезапись содержимого файла или как добавление к файлу.
□ Доступ, указывающий, как будет осуществляться доступ к файлу, будет ли выполняться чтение или запись в файл или и то и другое.
□ Общийдоступ. Другими словами, будет ли осуществляться исключительный доступ к файлу, или желательно, чтобы другие потоки могли одновременно получать доступ к этому файлу. Если так, то должны ли другие потоки иметь доступ для чтения файла, записи в него или для того и другого.
Первый из этих видов данных представлен обычно строкой, которая содержит полное имя пути доступа файла, и в этой главе будут рассматриваться только те конструкторы, которые требуют строку. Помимо этих конструкторов, существуют и некоторые другие, которые получают дескриптор файла Windows в стиле старого Windows API. Остальные три вида данных представлены тремя перечислениями .NET, называемыми соответственно FileMode
, FileAccess
и FileShare
. Значения этих перечислений должны быть понятны из названий.
Перечисление | Значения |
---|---|
FileMode (режим файла) |
Append (добавить), Create (создать), CreateNew (создать новый), Open (открыть), OpenOrCreate (открыть или создать), Truncate (обрезать) |
FileAccess (доступ к файлу) |
Read (чтение), ReadWrite (чтение-запись), Write (запись) |
FileShare (общий доступ к файлу) |
None (нет), Read (чтение), ReadWrite (чтение-запись), Write (запись) |
Отметим, что в случае FileMode
могут порождаться исключения, если запросить режим, который несогласован с существующим статусом файла. Append
, Open
и Truncate
будут порождать исключение, если файл еще не существует, a CreateNew
будет порождать исключение, если он существует. Create
и OpenOrCreate
будут удовлетворять любому сценарию, но Create
будет удалять любой существующий файл для замены его новым, вначале пустым файлом.
Существует большое число конструкторов для FileSream
. Три простейшие из них работают следующим образом:
// создает файл с доступом read-write и предоставляет другим потокам
// доступ на чтение
FileStream fs = new FileStream(@"C:\C# Projects\Projects.doc", FileMode.Create);
// как и выше, но мы получаем доступ к файлу только на запись
FileStream fs2 = new FileStream(@"C:\C# Projects\Projects2.doc", FileMode.Create, FileAccess.Write);
// как и выше, но другие потоки не имеют никакого доступа к файлу,
// пока fs3 открыт
FileStream fs3 = new FileStream(@"C:\C# Projects\Projects3.doc", FileMode.Create, FileAccess.Read, FileShare.None);
Из этого кода можно видеть, что эти перегружаемые версии конструкторов предоставляют значения по умолчанию FileAcces.ReadWrite
и FileShare.Read
для третьего и четвертого параметров. Также можно создать файловый поток из экземпляра FileInfo
:
FileInfo MyFile4 = new FileInfo(@"C:\C# Projects\Projects4.doc");
FileStream fs4 = MyFile4.OpenRead();
FileInfo MyFile5 = new FileInfo(@"C:\C# Projects\Projects5.doc");
FileStream fs5 = MyFile5.OpenWrite();
FileInfo MyFile6 = new FileInfo(@"C:\C# Projects\Projects6.doc");
FileStream fs6 = MyFile6.Open(FileMode.Append, FileAccess.Read, FileShare.None);
FileInfo MyNewFile = new FileInfo(@"C:\C# Projects\ProjectsNew.doc");
FileStream fs7 = MyNewFile.Create();
FileInfo.OpenRead()
поставляет поток, предоставляющий доступ только для чтения к существующему файлу, в то время как FileInfo.OpenWrite() предоставляет доступ для чтения-записи. FileInfo.Open()
позволяет явно определить параметры режима, доступа и общего доступа.
Интервал:
Закладка: