Работа с файлами и каталогами

C Sharp > Работа с файлами и каталогами
21.02.2018 12:37:52


Наиболее часто встречающиеся слова в статье:

[Dispose] [StreamReader] [создания] [перемещения] [Console] [статические] [WriteLine] [потоков] [FileStream]


Статья:

File - статические методы для создания, копирования, удаления и перемещения файлов.
FileInfo - методы экземпляра для создания, копирования, удаления и перемещения файлов.
Directory - статические методы для создания, перемещения и перечисления файлов в каталогах.
DirectoryInfo - методы экземпляра для создания, перемещения и перечисления файлов в каталогах.
Path - методы и свойства для обработки имён каталогов кроссплатформенным способом.

Добавление текста в файл:
string path = @"C:\Users\student\books.txt";
if (File.Exists(path))
File.AppendAllText(path, “some text \r\n new line"); 
 
Поиск по дереву каталогов:
string path = @"C:\Users\student\Desktop"; 
string[] books = Directory.GetFiles(path, "*.pdf", SearchOption.AllDirectories); 
foreach (string s in books) Console.WriteLine(s); 

Потоки байтов

FileStream — для чтения и записи в файл.
MemoryStream — для чтения и записи в память.
BufferedStream — для повышения быстродействия операций чтения и записи.
NetworkStream — для чтения и записи на сетевые сокеты.
PipeStream — для чтения и записи в анонимные и именованные каналы.
CryptoStream — для связи потоков данных с криптографическими алгоритмами.

Чтение байтов из файла:

string path = @"C:\Users\student\books.txt";
FileStream fs = File.OpenRead(path);
// FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
int ch;
while( (ch = fs.ReadByte()) != -1) Console.Write(char.ConvertFromUtf32(ch));
 
fs.Close(); // вызывает Dispose(true)
fs.Dispose(); // рекомендуется вызывать именно его
Потоки символов
BinaryReader и BinaryWriter - для чтения и записи простых типов данных, например: double.

TextReader и TextWriter - абстрактные базовые классы. Их наследники:
StreamReader и StreamWriter - для чтения и записи текстов с учётом кодировки символов.
StringReader и StringWriter - для чтения и записи символов в строки или из строк.
Чтение текстового файла:
 
           string  line;
           StreamReader  tr = null;
            string path = @"C:\Users\student\books.txt";
            try
            {
                tr = new StreamReader(path, Encoding.GetEncoding(1251));
                while ((line = tr.ReadLine()) != null)    Console.WriteLine(line);
            }
            finally { 
	if (tr!=null) 	tr.Dispose();
           }
 
Чтение текстового файла (вариант с using):
 
           string  line;
           string path = @"C:\Users\student\books.txt";
 
           using (StreamReader tr = new StreamReader(path,Encoding.GetEncoding(1251) ))   
          {
               while ((line = tr.ReadLine()) != null)    Console.WriteLine(line);
          } 	
 
Работа с архивами

ZipArchive — набор сжатых файлов в формате ZIP.
ZipArchiveEntry — сжатый файла в архиве.
ZipFile — статические методы для работы с архивом.
ZipFileExtensions — расширяющие методы для работы с архивом.

DeflateStream — для сжатия и распаковки потоков с помощью алгоритма Deflate.
GZipStream — для сжатия и распаковки потоков в формате gzip.

Извлечение всех файлов из архива ZIP:
 
     string zipPath = @"C:\Users\student\Desktop\java.zip";
     string extractPath = @"C:\Users\student\Desktop";
 
     using (ZipArchive archive = 
	ZipFile.Open(zipPath, ZipArchiveMode.Read))
     {
               archive.ExtractToDirectory(extractPath);
     } 	
 
Сериализация в .Net

Разрешена для коллекций и многих встроенных типов.
Для пользовательских типов надо дать разрешение:
[Serializable()]
class Star { }
Можно исключить часть членов объекта из сериализации:
[Serializable()]
class Star {
[field: NonSerialized()] int count;
}
Выбрать формат данных: BinaryFormatter или SoapFormatter (XML)

Сохранение данных объекта в двоичном формате:
	Star star = new Star();
	Stream stream = File.Create(“star.bin); 
	BinaryFormatter serializer = new BinaryFormatter (); 	serializer.Serialize(stream,  star); 
	stream.Dispose();
Чтение
            	Stream stream = File.OpenRead (“star.bin); 
 	BinaryFormatter serializer = new BinaryFormatter ();
            	Star star = (Star)serializer.Deserialize(stream);
            	stream.Dispose();
 
А если хотим изменить, то как происходит сохранение?
 
    [Serializable] 
    public class Star : ISerializable  { 
	public Star() { }
	int    mass;	
	public void GetObjectData ( SerializationInfo  info, StreamingContext  context)   {
		info.AddValue(“mass", mass, typeof(int)); 
	} 
 	public Star (SerializationInfo info, StreamingContext context)   { 
		mass= (int) info.GetValue(“mass", typeof(int));
	}
    }