diff --git a/ElectricLocomotive/Generics/LocomotivesGenericStorage.cs b/ElectricLocomotive/Generics/LocomotivesGenericStorage.cs index 4254b70..4731b30 100644 --- a/ElectricLocomotive/Generics/LocomotivesGenericStorage.cs +++ b/ElectricLocomotive/Generics/LocomotivesGenericStorage.cs @@ -110,37 +110,38 @@ namespace ProjectElectricLocomotive.Generics /// /// Путь и имя файла /// - public bool SaveData(string filename) { + public bool SaveData(string filename) + { if (File.Exists(filename)) { File.Delete(filename); } StringBuilder data = new(); - foreach ( - KeyValuePair> - record in _locomotiveStorage) + using (StreamWriter sw = new StreamWriter(filename)) { - StringBuilder records = new(); - foreach (DrawningLocomotive? elem in record.Value.GetCars) + sw.WriteLine("LocomotiveStorage"); + if (_locomotiveStorage.Count == 0) { - records.Append( - $"{elem?.GetDataForSave(_separatorForObject)}" + - $"{_separatorRecords}"); + return false; } - data.Append($"{record.Key}{_separatorForKeyValue}{records}{Environment.NewLine}"); + foreach ( + KeyValuePair> + record in _locomotiveStorage) + { + sw.Write(record.Key); + sw.Write(_separatorForKeyValue); + foreach (DrawningLocomotive? elem in record.Value.GetCars) + { + sw.Write( + $"{elem?.GetDataForSave(_separatorForObject)}" + + $"{_separatorRecords}"); + } + sw.WriteLine(); + } + return true; } - if (data.Length == 0) - { - throw new InvalidOperationException("Невалиданя операция, нет данных длясохранения"); - } - using FileStream fs = new(filename, FileMode.Create); - byte[] info = new - UTF8Encoding(true).GetBytes( - $"LocomotiveStorage{Environment.NewLine}{data}"); - fs.Write(info, 0, info.Length); - return true; } /// /// Загрузка информации по Локомативам в хранилище из файла @@ -154,56 +155,44 @@ namespace ProjectElectricLocomotive.Generics throw new FileNotFoundException($"Файл {filename} не найден"); } string bufferTextFromFile = ""; - using (FileStream fs = new(filename, FileMode.Open)) + using (StreamReader sr = new(filename)) { - byte[] b = new byte[fs.Length]; - UTF8Encoding temp = new(true); - while (fs.Read(b, 0, b.Length) > 0) + string line; + if (!((line = sr.ReadLine() != null) && line.StartsWith("LocomotiveStorage"))) { - bufferTextFromFile += temp.GetString(b); + //если нет такой записи, то это не те данные + return false; } - } - var strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, - StringSplitOptions.RemoveEmptyEntries); - if (strs == null || strs.Length == 0) - { - throw new FileLoadException("Нет данных для загрузки"); - } - if (!strs[0].StartsWith("LocomotiveStorage")) - { - //если нет такой записи, то это не те данные - throw new ArgumentException("Неверный формат данных"); - } - _locomotiveStorage.Clear(); - foreach (string data in strs) - { - string[] record = data.Split( - _separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); - if (record.Length != 2) + _locomotiveStorage.Clear(); + while ((line = sr.ReadLine()) != null) { - continue; - } - LocomotivesGenericCollection - collection = new(_pictureWidth, _pictureHeight); - string[] set = record[1].Split(_separatorRecords, StringSplitOptions.RemoveEmptyEntries); - Array.Reverse(set); - foreach (string elem in set) - { - DrawningLocomotive? locomotive = - elem?.CreateDrawningLocomotive( - _separatorForObject, - _pictureWidth, _pictureHeight); - if (locomotive != null) + string[] record = line.Split( + _separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); + if (record.Length != 2) { - if ((collection + locomotive) == 0) + continue; + } + LocomotivesGenericCollection + collection = new(_pictureWidth, _pictureHeight); + string[] set = record[1].Split(_separatorRecords, StringSplitOptions.RemoveEmptyEntries); + foreach (string elem in set) + { + DrawningLocomotive? locomotive = + elem?.CreateDrawningLocomotive( + _separatorForObject, + _pictureWidth, _pictureHeight); + if (locomotive != null) { - throw new InvalidOperationException("Ошибкадобавления в коллекцию"); + if ((collection + locomotive) == 0) + { + return false; + } } } + _locomotiveStorage.Add(record[0], collection); } - _locomotiveStorage.Add(record[0], collection); + return true; } - return true; } } }