public void SaveLayer(DirectoryInfo layersDir, LayerInfo layer) { var layerDir = layersDir .CreateSubdirectory(LayerPrefix + layer.EventDate.ToString(TimeStampFormat)); var path = Path.Combine(layerDir.FullName, layer.RelativePath); switch (layer.ChangeType) { case WatcherChangeTypes.Deleted: path = Path.Combine(path, $"{DeletePrefix}{layer.FileName}"); FileProvider.CreateWithDirectory(path, null); break; case WatcherChangeTypes.Renamed: path = Path.Combine(path, $"{RenamePrefix}{layer.FileName}_{layer.NewName}"); FileProvider.CreateWithDirectory(path, null); break; default: path = Path.Combine(path, layer.FileName); XmlSerializer formatter = new XmlSerializer(typeof(AddOrUpdateData)); FileProvider.CreateWithDirectory(path, () => { using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)) { formatter.Serialize(fs, layer.AddOrUpdateData); } }); break; } }
/// <summary> /// Инициализация хранилища состояния файлов и папок программы /// </summary> private void InitIfNeed() { if (!Settings.SrcFilesDir.Exists) { Settings.SrcFilesDir.Create(); DirectoryInfo observableDir = new DirectoryInfo(Settings.ObservedDirectoryPath); var files = observableDir.GetFiles("*.txt", SearchOption.AllDirectories); foreach (var elem in files) { var elemRelativePath = RelativePathFinder .GetRelativePath(elem.FullName, observableDir.FullName); var newPath = Path.Combine( Settings.SrcFilesDir.FullName, elemRelativePath, elem.Name ); var dataRows = FileProvider.TryReadAllLines(elem.FullName); FileProvider.CreateWithDirectory(newPath, () => { File.WriteAllLines(newPath, dataRows); }); //File.WriteAllLines(newPath, dataRows); StateStorage.FilesData.Add( Path.Combine(elemRelativePath, elem.Name), new StorageData() { //FullName = newPath, Name = elem.Name, Relative = elemRelativePath, Text = dataRows }); } } else { StateStorage = StorageProvider .ReadStorage(Settings.SrcFilesDir); var allLayers = LayerProvider .GetAllLayers(Settings.LayersDir); allLayers.ToList() .ForEach( e => StateStorage = LayerApplier.Apply(StateStorage, e) ); } if (!Settings.LayersDir.Exists) { Settings.LayersDir.Create(); } }