Создание подкаталогов

Следующий фрагмент кода описывает как можно создать поддиректорию MySub в директории Sub:

DirectoryInfo dir = new DirectoryInfo(@"F:\WINNT");

try

{

dir.CreateSubdirectory("Sub");

dir.CreateSubdirectory(@"Sub\MySub");

}

catch(IOException e)

{

Console.WriteLine(e.Message);

}

Создание файлов при помощи класса FileInfo

Класс FileInfo позволяет создавать новые файлы, получать информацию, удалять и перемещать их. В этом классе также есть методы для открытия, чтения и записи в файл. В следующем примере показано, как можно создать текстовый файл и получить доступ к его информации (времени его создания, полное имя, и так далее):

FileInfo fi = new FileInfo(@"F:\Myprogram.txt");

FileStream fstr = fi.Create();

Console.WriteLine("Creation Time: {0}",f.CreationTime);

Console.WriteLine("Full Name: {0}",f.FullName);

Console.WriteLine("FileAttributes: {0}",f.Attributes.ToString());

//Удаление файла Myprogram.txt.

Console.WriteLine("Press any key to delete the file");

Console.Read();

fstr.Close();

fi.Delete();

Описание метода Open()

В классе FileInfo есть метод под названием Open () с помощью которого можно создавать файлы, подставляя в параметры значения перечислений FileMode и FileAccess. Следующий фрагмент кода показывает, как это делается:

FileInfo f = new FileInfo("c:\myfile.txt");

FileStream s = f.Open(FileMode.OpenorWrite, FileAccess.Read);

После этого, используя объект 's', можно читать и записывать в файл. В перегруженном методе Open() можно только читать из файла. Для записи в файл необходимо в параметрах открытия использовать значение FileAccess.ReadWrite. Таблицы 8.4 и 8.5 содержат возможные значения FileMode и FileAccess.

Табл.8.4

Значение Применение
Append Для открытия файла и добавления данных. Используется совместностно со значением FileAccess.Write.
Create Для создания нового файла. Если файл уже существует, то он затирается.
CreateNew Для создания нового файла. Если файл существует, то возникает исключение IOException.
Open Для открытия существующего файла
OpenOrCreate Для открытия существующего или создания нового файла. Если файл не существует, тобудет создан новый.
Truncate Для урезания существующего файла

Табл.8.5

Значения Применение
Read Для чтения (получения) данных из файла
ReadWrite Для записи в или чтения из файла
Write Для записи данных в файл

Запись в текстовый файл при помощи класса StreamWriter

Текстовые данные или любую другую информацию можно записать в файл используя метод CreateText() в классе FileInfo. Однако предварительно необходимо получить валидный StreamWriter. Именно StreamWrite обеспечивает необходимую функциональность для записи в файл. Следующий пример иллюстрирует это:

FileInfo f = new FileInfo("Mytext.txt")

StreamWriter w = f.CreateText();

w.WriteLine("This is from");

w.WriteLine("Chapter 6");

w.WriteLine("Of C# Module");

w.Write(w.NewLine);

w.WriteLine("Thanks for your time");

w.Close();

Чтение из текстового файла

Для чтения из текстового файла можно воспользоваться классом StreamReader. Для этого необходимо указать имя файла в статическом методе OpenText() класса File. Следующий пример считывает содержимое файла, которое было записано в предыдущем примере:

Console.WriteLine("Reading the contents from the file");

StreamReader s = File.OpenText("Mytext.txt");

string read = null;

while ((read = s.ReadLine())!= null)

{

Console.WriteLine(read);

}

s.Close();

Работа с разными кодировками.

По умолчанию в.NET все текстовые данные в кодировке UTF8, но часто требуется считать текстовый файл, сохраненный в другой кодировке, допустим в WIN1251. В таком случае если в файле был русский текст в кодировке WIN1251, при считывании его в UTF8 мы получим нечитаемые данные. Для того чтобы переводить строки из одной кодировки в другую существует класс Encoding из пространства имен System.Text, благодаря которому зная исходную кодировку мы можем привести текстовые данные к нужной кодировке. Рассмотрим следующий пример, например, мы хотим конвертировать считанную строку в кодировке WIN1251 в кодировку DOS(866), для этого мы можем использовать следующий код:

class Program

{

private static string in1251;

private static readonly Encoding enc1251 = Encoding.GetEncoding(1251);

private static readonly Encoding enc866 = Encoding.GetEncoding(866);

static void Main(string[] args)

{

//....

//тут каким то образом получаем данные в in1251

byte[] sourceBytes = enc1251.GetBytes(in1251);

string outputString = enc866.GetString(sourceBytes);

//далее делаем то что требуется с полученной строкой

//....

}

}

В sourceBytes мы получили входную строку в виде массива байт, которые далее мы можем так же посредством Encoding сохранить в строку с нужной кодировкой. В случае, когда мы читаем текст уже известной кодировке из файла, дела обстоят еще проще. При создании экземпляра StreamReader мы можем явно указать кодировку источника, код будет выглядеть следующим образом:

using (var sr = new StreamReader("Mytext.txt", Encoding.GetEncoding(1251)))

{

string read = null;

while ((read = sr.ReadLine())!= null)

Console.WriteLine(read);

}

Рассмотрим пример работы с файлами. При записи в файл в нужной кодировке для StreamWriter так же можно указать кодировку, в которой будет текст.

Поместим на форму 4 кнопки и текстовое поле:

button1 свойство Text = Создать файл

button2 свойство Text = Удалить файл

button3 свойство Text = Записать текст в файл

button4 свойство Text = Прочитать файл

и в текстовом поле свойство Multiline = true (включение многострочного режима)

Вот что должно получиться (рис.8.1):

Рис.8.1. Вид окна работы с файлами

Код программы.

Листинг 8.1

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO; //Подключаем пространство имен для работы с файлами

namespace Files

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

FileInfo file = new FileInfo("vbbook.txt");

}

/**

* Создание файлов

*/

private void button1_Click(object sender, EventArgs e)

{

FileInfo file = new FileInfo("vbbook.txt");

if (file.Exists == false) //Если файл не существует

{

file.Create(); //Создаем

}

else MessageBox.Show("Файл уже создан!");

}

/**

* Удаляем файл

*/

private void button2_Click(object sender, EventArgs e)

{

FileInfo file = new FileInfo("vbbook.txt");

if (file.Exists == true) //Если файл существует

{

file.Delete(); //Удаляем

}

else MessageBox.Show("Файла не существует!!");

}

/**

* Записать текст в файл

*/

private void button3_Click(object sender, EventArgs e)

{

StreamWriter write_text; //Класс для записи в файл

FileInfo file = new FileInfo("vbbook.txt");

write_text = file.AppendText(); //Дописываем инфу в файл, если файла не существует он создастся

write_text.WriteLine(textBox1.Text); //Записываем в файл текст из текстового поля

write_text.Close(); // Закрываем файл

}

private void button4_Click(object sender, EventArgs e)

{

StreamReader streamReader = new StreamReader("vbbook.txt"); //Открываем файл для чтения

string str = ""; //Объявляем переменную, в которую будем записывать текст из файла

while (!streamReader.EndOfStream) //Цикл длиться пока не будет достигнут конец файла

{

str += streamReader.ReadLine(); //В переменную str по строчно записываем содержимое файла

}

textBox1.Text = str;

}

}

}

Задания к лабораторной работе 8:

1. Изучить предлагаемую теорию.

2. Записать и откомпилировать программу листинга 8.1, использующие графический интерфейс.

3. Выполнить домашние задания, согласно номеру варианта.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: