lab_stream.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. ## Работа с дисками
  2. using System;
  3. using System.IO;
  4. DriveInfo[] drives = DriveInfo.GetDrives();
  5. foreach (DriveInfo drive in drives)
  6. {
  7. Console.WriteLine($"Название: {drive.Name}");
  8. Console.WriteLine($"Тип: {drive.DriveType}");
  9. if (drive.IsReady)
  10. {
  11. Console.WriteLine($"Объем диска: {drive.TotalSize}");
  12. Console.WriteLine($"Свободное пространство: {drive.TotalFreeSpace}");
  13. Console.WriteLine($"Метка: {drive.VolumeLabel}");
  14. }
  15. Console.WriteLine();
  16. }
  17. ## Работа с каталогами
  18. string dirName = "C:\\";
  19. if (Directory.Exists(dirName))
  20. {
  21. Console.WriteLine("Подкаталоги:");
  22. string[] dirs = Directory.GetDirectories(dirName);
  23. foreach (string s in dirs)
  24. {
  25. Console.WriteLine(s);
  26. }
  27. Console.WriteLine();
  28. Console.WriteLine("Файлы:");
  29. string[] files = Directory.GetFiles(dirName);
  30. foreach (string s in files)
  31. {
  32. Console.WriteLine(s);
  33. }
  34. }
  35. ### Создание каталога
  36. string path = @"C:\SomeDir";
  37. string subpath = @"program\avalon";
  38. DirectoryInfo dirInfo = new DirectoryInfo(path);
  39. if (!dirInfo.Exists)
  40. {
  41. dirInfo.Create();
  42. }
  43. dirInfo.CreateSubdirectory(subpath);
  44. ### Получение информации о каталоге
  45. string dirName = "C:\\Program Files";
  46. DirectoryInfo dirInfo = new DirectoryInfo(dirName);
  47. Console.WriteLine($"Название каталога: {dirInfo.Name}");
  48. Console.WriteLine($"Полное название каталога: {dirInfo.FullName}");
  49. Console.WriteLine($"Время создания каталога: {dirInfo.CreationTime}");
  50. Console.WriteLine($"Корневой каталог: {dirInfo.Root}");
  51. ### Удаление каталога
  52. string dirName = @"C:\SomeFolder";
  53. try
  54. {
  55. DirectoryInfo dirInfo = new DirectoryInfo(dirName);
  56. dirInfo.Delete(true);
  57. Console.WriteLine("Каталог удален");
  58. }
  59. catch (Exception ex)
  60. {
  61. Console.WriteLine(ex.Message);
  62. }
  63. ### Перемещение каталога
  64. string oldPath = @"C:\SomeFolder";
  65. string newPath = @"C:\SomeDir";
  66. DirectoryInfo dirInfo = new DirectoryInfo(oldPath);
  67. if (dirInfo.Exists && Directory.Exists(newPath) == false)
  68. {
  69. dirInfo.MoveTo(newPath);
  70. }
  71. ## Работа с файлами. Классы File и FileInfo
  72. ### Получение информации о файле
  73. string path = @"C:\apache\hta.txt";
  74. FileInfo fileInf = new FileInfo(path);
  75. if (fileInf.Exists)
  76. {
  77. Console.WriteLine("Имя файла: {0}", fileInf.Name);
  78. Console.WriteLine("Время создания: {0}", fileInf.CreationTime);
  79. Console.WriteLine("Размер: {0}", fileInf.Length);
  80. }
  81. ```
  82. ### Удаление файла
  83. string path = @"C:\apache\hta.txt";
  84. FileInfo fileInf = new FileInfo(path);
  85. if (fileInf.Exists)
  86. {
  87. fileInf.Delete();
  88. // альтернатива с помощью класса File
  89. // File.Delete(path);
  90. }
  91. ```
  92. ### Перемещение файла
  93. string path = @"C:\apache\hta.txt";
  94. string newPath = @"C:\SomeDir\hta.txt";
  95. FileInfo fileInf = new FileInfo(path);
  96. if (fileInf.Exists)
  97. {
  98. fileInf.MoveTo(newPath);
  99. // альтернатива с помощью класса File
  100. // File.Move(path, newPath);
  101. }
  102. ### Копирование файла
  103. string path = @"C:\apache\hta.txt";
  104. string newPath = @"C:\SomeDir\hta.txt";
  105. FileInfo fileInf = new FileInfo(path);
  106. if (fileInf.Exists)
  107. {
  108. fileInf.CopyTo(newPath, true);
  109. // альтернатива с помощью класса File
  110. // File.Copy(path, newPath, true);
  111. }
  112. # FileStream. Чтение и запись файла
  113. ### Чтение и запись файлов
  114. using System;
  115. using System.IO;
  116. namespace HelloApp
  117. {
  118. class Program
  119. {
  120. static void Main(string[] args)
  121. {
  122. // создаем каталог для файла
  123. string path = @"C:\SomeDir2";
  124. DirectoryInfo dirInfo = new DirectoryInfo(path);
  125. if (!dirInfo.Exists)
  126. {
  127. dirInfo.Create();
  128. }
  129. Console.WriteLine("Введите строку для записи в файл:");
  130. string text = Console.ReadLine();
  131. // запись в файл
  132. using (FileStream fstream = new FileStream($"{path}\note.txt", FileMode.OpenOrCreate))
  133. {
  134. // преобразуем строку в байты
  135. byte[] array = System.Text.Encoding.Default.GetBytes(text);
  136. // запись массива байтов в файл
  137. fstream.Write(array, 0, array.Length);
  138. Console.WriteLine("Текст записан в файл");
  139. }
  140. // чтение из файла
  141. using (FileStream fstream = File.OpenRead($"{path}\note.txt"))
  142. {
  143. // преобразуем строку в байты
  144. byte[] array = new byte[fstream.Length];
  145. // считываем данные
  146. fstream.Read(array, 0, array.Length);
  147. // декодируем байты в строку
  148. string textFromFile = System.Text.Encoding.Default.GetString(array);
  149. Console.WriteLine($"Текст из файла: {textFromFile}");
  150. }
  151. Console.ReadLine();
  152. }
  153. }
  154. }
  155. Unhandled exception. System.IO.IOException: Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\SomeDir3
  156. ote.txt'
  157. at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
  158. at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 un
  159. ixCreateMode)
  160. at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCr
  161. eateMode)
  162. at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullabl
  163. e`1 unixCreateMode)
  164. at System.IO.FileStream..ctor(String path, FileMode mode)
  165. at HelloApp.Program.Main(String[] args) in C: \Users\Neptu\RiderProjects\kapralov12\kapralov12\Program.cs:line 22
  166. at HelloApp.Program.<Main>(String[] args)
  167. ### Запись в файл и StreamWriter
  168. using System;
  169. using System.IO;
  170. namespace HelloApp
  171. {
  172. class Program
  173. {
  174. static void Main(string[] args)
  175. {
  176. string writePath = @"C:\SomeDir\hta.txt";
  177. string text = "Привет мир!\nПока мир...";
  178. try
  179. {
  180. using (StreamWriter sw = new StreamWriter(
  181. writePath, false, System.Text.Encoding.Default))
  182. {
  183. sw.WriteLine(text);
  184. }
  185. using (StreamWriter sw = new StreamWriter(
  186. writePath, true, System.Text.Encoding.Default))
  187. {
  188. sw.WriteLine("Дозапись");
  189. sw.Write(4.5);
  190. }
  191. Console.WriteLine("Запись выполнена");
  192. }
  193. catch (Exception e)
  194. {
  195. Console.WriteLine(e.Message);
  196. }
  197. }
  198. }
  199. }
  200. Запись выполнена
  201. ### Чтение из файла и StreamReader
  202. using System;
  203. using System.IO;
  204. using System.Threading.Tasks;
  205. string path = @"C:\SomeDir\hta.txt";
  206. try
  207. {
  208. using (StreamReader sr = new StreamReader(path))
  209. {
  210. Console.WriteLine(sr.ReadToEnd());
  211. }
  212. // асинхронное чтение
  213. using (StreamReader sr = new StreamReader(path))
  214. {
  215. Console.WriteLine(await sr.ReadToEndAsync());
  216. }
  217. }
  218. catch (Exception e)
  219. {
  220. Console.WriteLine(e.Message);
  221. }
  222. ## Бинарные файлы. BinaryWriter и BinaryReader
  223. struct State
  224. {
  225. public string name;
  226. public string capital;
  227. public int area;
  228. public double people;
  229. public State(string n, string c, int a, double p)
  230. {
  231. name = n;
  232. capital = c;
  233. people = p;
  234. area = a;
  235. }
  236. }
  237. class Program
  238. {
  239. static void Main(string[] args)
  240. {
  241. State[] states = new State[2];
  242. states[0] = new State("Германия", "Берлин", 357168, 80.8);
  243. states[1] = new State("Франция", "Париж", 640679, 64.7);
  244. string path = @"C:\SomeDir\states.dat";
  245. try
  246. {
  247. // создаем объект BinaryWriter
  248. using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
  249. {
  250. // записываем в файл значение каждого поля структуры
  251. foreach (State s in states)
  252. {
  253. writer.Write(s.name);
  254. writer.Write(s.capital);
  255. writer.Write(s.area);
  256. writer.Write(s.people);
  257. }
  258. }
  259. // создаем объект BinaryReader
  260. using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
  261. {
  262. // пока не достигнут конец файла
  263. // считываем каждое значение из файла
  264. while (reader.PeekChar() > -1)
  265. {
  266. string name = reader.ReadString();
  267. string capital = reader.ReadString();
  268. int area = reader.ReadInt32();
  269. double population = reader.ReadDouble();
  270. Console.WriteLine("Страна: {0} столица: {1} площадь {2} кв. км численность населения: {3} млн. чел.",
  271. name, capital, area, population);
  272. }
  273. }
  274. }
  275. catch (Exception e)
  276. {
  277. Console.WriteLine(e.Message);
  278. }
  279. Console.ReadLine();
  280. }
  281. }
  282. ## Бинарная сериализация. BinaryFormatter
  283. # Атрибут Serializable
  284. using System;
  285. using System.IO;
  286. using System.Runtime.Serialization.Formatters.Binary;
  287. namespace Serialization
  288. {
  289. [Serializable]
  290. class Person
  291. {
  292. public string Name { get; set; }
  293. public int Age { get; set; }
  294. public Person(string name, int age)
  295. {
  296. Name = name;
  297. Age = age;
  298. }
  299. }
  300. class Program
  301. {
  302. static void Main(string[] args)
  303. {
  304. // объект для сериализации
  305. Person person = new Person("Tom", 29);
  306. Console.WriteLine("Объект создан");
  307. // создаем объект BinaryFormatter
  308. BinaryFormatter formatter = new BinaryFormatter();
  309. // получаем поток, куда будем записывать сериализованный объект
  310. using (FileStream fs = new FileStream("people.dat", FileMode.OpenOrCreate))
  311. {
  312. formatter.Serialize(fs, person);
  313. Console.WriteLine("Объект сериализован");
  314. }
  315. // десериализация из файла people.dat
  316. using (FileStream fs = new FileStream("people.dat", FileMode.OpenOrCreate))
  317. {
  318. Person newPerson = (Person)formatter.Deserialize(fs);
  319. Console.WriteLine("Объект десериализован");
  320. Console.WriteLine($"Имя: {newPerson.Name} --- Возраст: {newPerson.Age}");
  321. }
  322. Console.ReadLine();
  323. }
  324. }
  325. }