Запись/чтение в файлы

advertisement
// Для условной компиляции используются символы.
// Определение символа дается директивой #define
// Отказ от определения - директива #undef
// Директивы помещаются в начало файла
// В тексте при этом можно использовать условные операторы #if, #else, #endif
#define stream
//#undef stream
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Data;
namespace nsWriteReadFiles
{
// Пример работы с файлами
class prWriteReadFiles
{
static void Main(string[] args)
{
// Описывается и создается в памяти объект rnd типа Random
// Объект rnd позволяет генерировать последовательность
//случайных чисел
Random rnd = new Random();
// Описывается переменная типа Double
Double d;
// Переменной типа double присваивается случайное значение в
//интервале 0;1
d = rnd.NextDouble();
Console.WriteLine("Генератор вернул случайное число d = {0} из интервала [0;1)", d);
// Работа с бинарным файлом
// Запись в бинарный файл
Console.WriteLine("Запись в бинарный файл числа с плавающей запятой");
#if stream
// Описывается массив байтов, который будет
//хранить бинарное представление информации,
// помещаемой в поток. В данном случае это будет
//массив из 8 байтов, содержащий число d
byte[] bytes;
// В массив bytes помещаются байты,
//из которых состоит переменная d
bytes = BitConverter.GetBytes(d);
// Описывается и создается в памяти объект s типа Stream,
// которому передается ссылка на содержимое вновь
//созданного файла с именем Test,
// находящегося в текущей директории - там,
//где находится exe-файл процесса
using (Stream s = File.Create("Test"))
{
// В файл записывается массив с бинарным содержимым
// переменной типа double
s.Write(bytes, 0, bytes.Length);
// Объект s (поток) и файл освобождаются
}
#else
// Альернативный вариант
// Использование класса BinaryWriter
// Нет необходимости в массиве байтов и в преобразовании
using (BinaryWriter bw = new BinaryWriter(File.Create("Test")))
bw.Write(d);
#endif
Console.WriteLine("Значение переменной d = {0} записано в бинарный файл Test",
d);
Console.ReadLine();
// Считывание из бинарного файла
#if stream
// 1-ая версия. Используется массив байтов и класс Stream
// Массив байтов инициализируется для "чистоты эксперимента"
bytes.Initialize();
//bytes = new byte[sizeof(Double)];
// Создается объект s типа Stream со ссылкой на файл,
// содержимое которого будет помещаться в поток
using (Stream s = File.OpenRead("Test"))
{
// В массив bytes считывается содержимое файла
s.Read(bytes, 0, bytes.Length);
// Файл и объект s освобождаются
}
// На консоль выводится содержимое массива в формате
//переменной типа double
Console.WriteLine("Число, считанное с бинарного файла с помощью Stream ={0}",
BitConverter.ToDouble(bytes, 0));
#else
// 2-ая версия - использование класса BinaryReader
using (BinaryReader br = new BinaryReader(File.OpenRead("Test")))
Console.WriteLine("Число, считанное с бинарного файла с помощью BinaryReader ={0}",
br.ReadDouble());
#endif
Console.ReadLine();
// Запись в текстовой файл
Console.WriteLine("Запись в текстовой файл числа с плавающей запятой");
// Создается объект tw типа TextWriter,
// которому ставится в соответствие файл для записи текста
using (TextWriter tw = File.CreateText("Test.txt"))
// В файл записывается число типа double и сносится строка
tw.WriteLine(d);
// Файл и объект tw освобождаются
Console.WriteLine("Значение переменной d = {0} записано в текстовой файл Test.txt",
d);
Console.ReadLine();
// Чтение из текстового файла
// Описывается строка str, в которую будет помещено
//содержимое текстового файла
string str;
// Создается объект tr типа TextReader и открывается
//текстовой файл,
using (TextReader tr = File.OpenText("Test.txt"))
{
// В строку str считывается строка текста из потока sr
str = tr.ReadLine();
// Файл и объект sr освобождаются
}
// Строка str выводится на консоль
Console.WriteLine("Содержимое текстового файла равно " + str);
Console.ReadLine();
//Запись в xml-формате
Console.WriteLine("Запись в xml-файл числа с плавающей запятой");
// Создается объект xmlw типа XmlWriter и xml-файл
using (XmlWriter xmlw = XmlWriter.Create("Test.xml"))
{
// Записывается узел типа элемент с именем aDouble
xmlw.WriteStartElement("aDouble");
// Записывается содержание узла aDouble
xmlw.WriteValue(d);
// файл и объект xmlw освобождаются
}
Console.WriteLine(
"Значение переменной d = {0} записано в файл формата Test.xml в узел с именем aDouble",
d);
Console.ReadLine();
// Чтение из xml-файла
// Создается объект xmlr типа XmlReader, соответствующий xml-файлу
using (XmlReader xmlr = XmlReader.Create("Test.xml"))
{
// Считываются все узлы до конца файла
while (xmlr.Read())
if (xmlr.NodeType == XmlNodeType.Text)
// Если узел текстовой
// Содержимое узла распечатывается на консоли
Console.WriteLine("Значение переменной d, считанное с файла Test.xml, равно {0}",
xmlr.Value);
// файл и объект xmlr освобождаются
}
Console.ReadLine();
// Запись в xml-файл кэшированных данных
Console.WriteLine("Запись в xml-файл кэшированной базы данных");
// Создается объект ds типа DataSet, кэширующий данные в
//памяти, с именем aDataSet
using (DataSet ds = new DataSet("aDataSet"))
{
// К объекту ds добавляется таблица с именем aTable
ds.Tables.Add(new DataTable("aTable"));
// К таблице добавляется колонка с именем aColumn
ds.Tables["aTable"].Columns.Add(new DataColumn("aColumn"));
// К таблице добавляется строка
ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());
// В элемент 0,0 таблицы заносится число d
ds.Tables[0].Rows[0][0] = d;
// Данные объекта ds записываются во вновь создаваемый xml-файл
ds.WriteXml("Test.ds.xml");//Console.Out
// файл и объект ds освобождаются
}
Console.WriteLine(
"Значение переменной d = {0} записано в файл Test.ds.xml как элемент [0,aColumn] таблицы aTable
базы aDataSet", d);
Console.ReadLine();
// Считывание xml-файла в память
// Создается объект ds класса DataSet без имени
using (DataSet ds = new DataSet())
{
// В объект считывается информация из xml-файла
ds.ReadXml("Test.ds.xml");
// Содержимое 0,0-элемента таблицы aTable выводится на консоль
Console.WriteLine(
"Значение элемента [0;aColumn] таблицы aTable из базы данных, считанной с файла Test.ds.xml,
равно {0}",
ds.Tables["aTable"].Rows[0]["aColumn"]);
// файл и объект ds освобождаются
}
Console.ReadLine();
}
}
}
Download