Работа с файлами в C#

20.08.2014 at 08:26

file

Чтение файла

Прочитать данные из файла можно несколькими способами:

  • File.ReadAllText(@»D:\myfile.txt») — вернет содержимое файла одной строкой.
  • File.ReadAllLines(@»D:\myfile.txt») — содержимое файла в виде массива строк.
  • File.ReadAllBytes(@»D:\myfile.txt») — содержимое файла в виде массива байт.

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

Вызов

System.IO.File.AppendAllText(@"D:\myfile.txt", "new line")

запишет в файл переданный текст. Если файл с заданным именем не существует — он будет создан.

XML сериализация

В C# есть встроенные возможности для сохранения объектов в XML и загрузки из XML. Сохраняются при это только свойства. Значения полей сохраняться не будут.
Создаем класс, экземпляры которого будем сохранять и загружать:

public class Animal
{
  public string Name { get; set; }
}

Теперь нам нужны 2 метода, для сохранения и загрузки:

public static void SerializeObjectToFile<T>(T serializingObject, string path)
{
  XmlSerializer writer = new XmlSerializer(typeof(T));
  using (StreamWriter file = new StreamWriter(path))
  {
    writer.Serialize(file, serializingObject);
  }
}

public static T DeserializeObjectFromFile<T>(string path)
{
  using (StreamReader file = new StreamReader(path))
  {
    XmlSerializer reader = new XmlSerializer(typeof(T));
    return (T)reader.Deserialize(file);
  }
}

Проверяем:

var cat = new Animal();
cat.Name = "Garfield";
SerializeObjectToFile(cat, @"D:\cat.txt");
var newCat = DeserializeObjectFromFile<Animal>(@"D:\cat.txt");
Console.WriteLine(newCat.Name);

Содержимое файла D:\cat.txt:

<?xml version="1.0" encoding="utf-8"?>
<Animal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Garfield</Name>
</Animal>

Архивация файлов в C#

Начиная с версии 4.5 в .Net Framework появились классы для работы с zip архивами. Для их использования нужно подключить к проекту сборку System.IO.Compression.FileSystem.
Создать zip архив очень просто:

ZipFile.CreateFromDirectory(@"D:\cat", @"D:\cat.zip");

Первым аргументом передается путь к папке, содержимое которой архивируется. Вторым — имя архива.
Распаковать архив тоже не сложно:

ZipFile.ExtractToDirectory(@"D:\cat.zip", @"D:\cat1");

Первый аргумент — путь к архиву, второй — путь к папке, в которую будет распакован архив.