diff --git a/Sailboat/Sailboat/BoatsGenericStorage.cs b/Sailboat/Sailboat/BoatsGenericStorage.cs
index 8702e41..9e83887 100644
--- a/Sailboat/Sailboat/BoatsGenericStorage.cs
+++ b/Sailboat/Sailboat/BoatsGenericStorage.cs
@@ -28,6 +28,18 @@ namespace Sailboat.Generics
///
private readonly int _pictureHeight;
///
+ /// Разделитель для записи ключа и значения элемента словаря
+ ///
+ private static readonly char _separatorForKeyValue = '|';
+ ///
+ /// Разделитель для записей коллекции данных в файл
+ ///
+ private readonly char _separatorRecords = ';';
+ ///
+ /// Разделитель для записи информации по объекту в файл
+ ///
+ private static readonly char _separatorForObject = ':';
+ ///
/// Конструктор
///
///
@@ -80,5 +92,94 @@ namespace Sailboat.Generics
return null;
}
}
+
+ ///
+ /// Сохранение информации по автомобилям в хранилище в файл
+ ///
+ /// Путь и имя файла
+ /// true - сохранение прошло успешно, false - ошибка при сохранении данных
+ public bool SaveData(string filename)
+ {
+ if (File.Exists(filename))
+ {
+ File.Delete(filename);
+ }
+ StringBuilder data = new();
+ foreach (KeyValuePair> record in _boatStorages)
+ {
+ StringBuilder records = new();
+ foreach (DrawingBoat? elem in record.Value.GetBoats)
+ {
+ records.Append($"{elem?.GetDataForSave(_separatorForObject)}{_separatorRecords}");
+ }
+ data.AppendLine($"{record.Key}{_separatorForKeyValue}{records}");
+ }
+ if (data.Length == 0)
+ {
+ return false;
+ }
+ using (StreamWriter writer = new StreamWriter(filename))
+ {
+ writer.Write($"PlaneStorage{Environment.NewLine}{data}");
+ }
+ return true;
+ }
+ ///
+ /// Загрузка информации по автомобилям в хранилище из файла
+ ///
+ /// Путь и имя файла
+ /// true - загрузка прошла успешно, false - ошибка призагрузке данных
+ public bool LoadData(string filename)
+ {
+ if (!File.Exists(filename))
+ {
+ return false;
+ }
+
+ using (StreamReader fs = File.OpenText(filename))
+ {
+ string str = fs.ReadLine();
+ if (str == null || str.Length == 0)
+ {
+ return false;
+ }
+ if (!str.StartsWith("BoatStorage"))
+ {
+ return false;
+ }
+
+ _boatStorages.Clear();
+ string strs = "";
+
+ while ((strs = fs.ReadLine()) != null)
+ {
+ if (strs == null)
+ {
+ return false;
+ }
+
+ string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
+ if (record.Length != 2)
+ {
+ continue;
+ }
+ BoatsGenericCollection collection = new(_pictureWidth, _pictureHeight);
+ string[] set = record[1].Split(_separatorRecords, StringSplitOptions.RemoveEmptyEntries);
+ foreach (string elem in set)
+ {
+ DrawingBoat? boat = elem?.CreateDrawingBoat(_separatorForObject, _pictureWidth, _pictureHeight);
+ if (boat != null)
+ {
+ if (!(collection + boat))
+ {
+ return false;
+ }
+ }
+ }
+ _boatStorages.Add(record[0], collection);
+ }
+ return true;
+ }
+ }
}
}
\ No newline at end of file