## работа с дисками ### pervoe zadanie ``` using System; using System.IO; DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) { Console.WriteLine($"название: {drive.Name}"); Console.WriteLine($"тип: {drive.DriveType}"); if (drive.IsReady) { Console.WriteLine($"объем диска: {drive.TotalSize}"); Console.WriteLine($"свободное пространство: {drive.TotalFreeSpace}"); Console.WriteLine($"метка: {drive.VolumeLabel}"); } Console.WriteLine(); } ``` ### вывод: ``` название: Z:\ тип: Fixed объем диска: 512107737088 свободное пространство: 107316289536 метка: ssdeha ``` ## работа с каталогами ### получение списка файлов и подкаталогов ``` string dirName = "Z:\\"; if (Directory.Exists(dirName)) { Console.WriteLine("подкаталоги:"); string[] dirs = Directory.GetDirectories(dirName); foreach (string s in dirs) { Console.WriteLine(s); } Console.WriteLine(); Console.WriteLine("файлы:"); string[] files = Directory.GetFiles(dirName); foreach (string s in files) { Console.WriteLine(s); } } ``` ### вывод: ``` подкаталоги: Z:\$RECYCLE.BIN Z:\FL Z:\govno Z:\JetBrains Rider 2023.3.3 Z:\krasivie_niggers Z:\oap Z:\SteamLibrary Z:\System Volume Information Z:\The Jackbox Party Pack 6 файлы: Z:\passwords,codes.txt ``` ### cоздание каталога ``` string path = @"Z:\SomeDir"; string subpath = @"program\avalon"; DirectoryInfo dirInfo = new DirectoryInfo(path); if (!dirInfo.Exists) { dirInfo.Create(); } dirInfo.CreateSubdirectory(subpath); ``` ### вывод: ``` Process finished with exit code 0. ``` ### получение информации о каталоге ``` string dirName = "Z:\\oap"; DirectoryInfo dirInfo = new DirectoryInfo(dirName); Console.WriteLine($"название каталога: {dirInfo.Name}"); Console.WriteLine($"полное название каталога: {dirInfo.FullName}"); Console.WriteLine($"время создания каталога: {dirInfo.CreationTime}"); Console.WriteLine($"корневой каталог: {dirInfo.Root}"); ``` ### вывод: ``` название каталога: oap полное название каталога: Z:\oap время создания каталога: 11.02.2024 13:10:13 корневой каталог: Z:\ ``` ### y даление каталога ``` string dirName = @"C:\SomeFolder"; try { DirectoryInfo dirInfo = new DirectoryInfo(dirName); dirInfo.Delete(true); Console.WriteLine("каталог удален"); } catch (Exception ex) { Console.WriteLine(ex.Message); } ``` ``` Could not find a part of the path 'C:\SomeFolder'. Process finished with exit code 0. ``` ### перемещение каталога ``` string oldPath = @"Z:\SomeFolder"; string newPath = @"Z:\SomeDir"; DirectoryInfo dirInfo = new DirectoryInfo(oldPath); if (dirInfo.Exists && Directory.Exists(newPath) == false) { dirInfo.MoveTo(newPath); } ``` ### вывод: ``` Process finished with exit code 0. ``` ## работа с файлами. классы File и FileInfo ### получение информации о файле ``` string path = @"F:\owner\msvcp120.dll"; FileInfo fileInf = new FileInfo(path); if (fileInf.Exists) { Console.WriteLine("имя файла: {0}", fileInf.Name); Console.WriteLine("время создания: {0}", fileInf.CreationTime); Console.WriteLine("размер: {0}", fileInf.Length); } ``` ### вывод: ``` имя файла: msvcp120.dll время создания: 20.11.2019 19:11:50 размер: 455328 ``` ### удаление файла ``` string path = @"Z:\owner\msvcp120.dll"; FileInfo fileInf = new FileInfo(path); if (fileInf.Exists) { fileInf.Delete(); } ``` ### вывод: ``` Process finished with exit code 0. ``` ### перемещение файла ``` string path = @"Z:\owner\msvcp120.dll"; string newPath = @"Z:\SomeDir\fortask.txt"; FileInfo fileInf = new FileInfo(path); if (fileInf.Exists) { fileInf.MoveTo(newPath); } ``` ### вывод: ``` Process finished with exit code 0. ``` ### копирование файла ``` string path = @"Z:\owner\msvcp120.dll"; string newPath = @"Z:\SomeDir\msvcp120.dll"; FileInfo fileInf = new FileInfo(path); if (fileInf.Exists) { fileInf.CopyTo(newPath, true); } ``` ### вывод: ``` Process finished with exit code 0. ``` ## FileStream. чтение и запись файла ### Ччение и запись файлов ``` using System; using System.IO; namespace HelloApp { class Program { static void Main(string[] args) { string path = @"Z:\SomeDir2"; DirectoryInfo dirInfo = new DirectoryInfo(path); if (!dirInfo.Exists) { dirInfo.Create(); } Console.WriteLine("введите строку для записи в файл:"); string text = Console.ReadLine(); using (FileStream fstream = new FileStream($"{path}\note.txt", FileMode.OpenOrCreate)) { byte[] array = System.Text.Encoding.Default.GetBytes(text); fstream.Write(array, 0, array.Length); Console.WriteLine("текст записан"); } using (FileStream fstream = File.OpenRead($"{path}\note.txt")) { byte[] array = new byte[fstream.Length]; fstream.Read(array, 0, array.Length); string textFromFile = System.Text.Encoding.Default.GetString(array); Console.WriteLine($"текст из файла: {textFromFile}"); } Console.ReadLine(); } } } ``` ### вывод: ``` введите строку для записи в файл: я люблю прогать Unhandled exception. System.IO.IOException: Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'Z:\SomeDir2 ote.txt' at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options) at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode) at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 pre allocationSize, Nullable`1 unixCreateMode) at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode) at System.IO.FileStream..ctor(String path, FileMode mode) at HelloApp.Program.Main(String[] args) in Z:\oap\labs\t5_files\ConsoleApp1\ConsoleApp1\Program.cs:line 19 ``` ### произвольный доступ к файлам ``` using System.IO; using System.Text; class Program { static void Main(string[] args) { string text = "hello world"; using (FileStream fstream = new FileStream(@"Z:\note.dat", FileMode.OpenOrCreate)) { byte[] input = Encoding.Default.GetBytes(text); fstream.Write(input, 0, input.Length); Console.WriteLine("текст записан в файл"); fstream.Seek(-5, SeekOrigin.End); byte[] output = new byte[5]; fstream.Read(output, 0, output.Length); string textFromFile = Encoding.Default.GetString(output); Console.WriteLine($"Текст из файла: {textFromFile}"); // заменим в файле слово world на слово house string replaceText = "house"; fstream.Seek(-5, SeekOrigin.End); input = Encoding.Default.GetBytes(replaceText); fstream.Write(input, 0, input.Length); fstream.Seek(0, SeekOrigin.Begin); output = new byte[fstream.Length]; fstream.Read(output, 0, output.Length); textFromFile = Encoding.Default.GetString(output); Console.WriteLine($"текст из файла: {textFromFile}"); } Console.Read(); } } ``` ### вывод: ``` текст записан в файл Текст из файла: world текст из файла: hello house ``` ### Закрытие потока ``` FileStream fstream = null; try { fstream = new FileStream(@"D:\note3.dat", FileMode.OpenOrCreate); // операции с потоком } catch(Exception ex) { } finally { if (fstream != null) fstream.Close(); } ``` ### вывод: ``` Process finished with exit code 0. ``` ### чтение и запись текстовых файлов. StreamReader и StreamWriter ``` using System; using System.IO; namespace HelloApp { class Program { static void Main(string[] args) { string writePath = @"Z:\SomeDir\text.txt"; string text = "привет мир!\nпока мир..."; try { using (StreamWriter sw = new StreamWriter( writePath, false, System.Text.Encoding.Default)) { sw.WriteLine(text); } using (StreamWriter sw = new StreamWriter( writePath, true, System.Text.Encoding.Default)) { sw.WriteLine("дозапись"); sw.Write(4.5); } Console.WriteLine("запись выполнена"); } catch (Exception e) { Console.WriteLine(e.Message); } } } } ``` ### вывод: ``` запись выполнена ``` ``` using System; using System.IO; using System.Threading.Tasks; namespace HelloApp { class Program { static async Task Main(string[] args) { string writePath = @"Z:\SomeDir\text.txt"; string text = "привет мир!\nпока мир..."; try { using (StreamWriter sw = new StreamWriter( writePath, false, System.Text.Encoding.Default)) { await sw.WriteLineAsync(text); } using (StreamWriter sw = new StreamWriter( writePath, true, System.Text.Encoding.Default)) { await sw.WriteLineAsync("дозапись"); await sw.WriteAsync("4,5"); } Console.WriteLine("запись выполнена"); } catch (Exception e) { Console.WriteLine(e.Message); } } } } ``` ### вывод: ``` запись выполнена Process finished with exit code 0. ``` ### чтение из файла и StreamReader ``` using System; using System.IO; using System.Threading.Tasks; string path = @"Z:\SomeDir\text.txt"; try { using (StreamReader sr = new StreamReader(path)) { Console.WriteLine(sr.ReadToEnd()); } using (StreamReader sr = new StreamReader(path)) { Console.WriteLine(await sr.ReadToEndAsync()); } } catch (Exception e) { Console.WriteLine(e.Message); } ``` ### вывод: ``` привет мир! пока мир... дозапись 4,5 привет мир! пока мир... дозапись 4,5 ``` ``` string path= @"Z:\SomeDir\text.txt"; using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default)) { string line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default)) { string line; while ((line = await sr.ReadLineAsync()) != null) { Console.WriteLine(line); } } ``` ### вывод: ``` привет мир! пока мир... дозапись 4,5 привет мир! пока мир... дозапись 4,5 ``` ## бинарные файлы. BinaryWriter и BinaryReader ``` struct State { public string name; public string capital; public int area; public double people; public State(string n, string c, int a, double p) { name = n; capital = c; people = p; area = a; } } class Program { static void Main(string[] args) { State[] states = new State[2]; states[0] = new State("Германия", "Берлин", 357168, 80.8); states[1] = new State("Франция", "Париж", 640679, 64.7); string path= @"Z:\SomeDir\states.dat"; try { using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate))) { foreach (State s in states) { writer.Write(s.name); writer.Write(s.capital); writer.Write(s.area); writer.Write(s.people); } } using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open))) { while (reader.PeekChar() > -1) { string name = reader.ReadString(); string capital = reader.ReadString(); int area = reader.ReadInt32(); double population = reader.ReadDouble(); Console.WriteLine("страна: {0} столица: {1} площадь {2} кв. км численность населения: {3} млн. чел.", name, capital, area, population); } } } catch (Exception e) { Console.WriteLine(e.Message); } Console.ReadLine(); } } ``` ### вывод: ``` страна: Германия столица: Берлин площадь 357168 кв. км численность населения: 80,8 млн. чел. страна: Франция столица: Париж площадь 640679 кв. км численность населения: 64,7 млн. чел. ```