//----------------------------------------------------------------------- // // Copyright (c) 2011 Deltares. All rights reserved. // // B.S.T. The // tom.the@deltares.nl // 20-12-2011 // Load and save state for DikeFlow calculation //----------------------------------------------------------------------- using System.IO; using Deltares.Standard.IO; namespace Deltares.Dam.Data { using System; using System.Collections.Generic; using System.Linq; using System.Text; public class DupuitStateFilerException : ApplicationException { public DupuitStateFilerException(string message) : base(message) { } } public class DupuitStateFiler { public const string initialStateExtension = ".C000"; public const string endStateExtension = ".CEND"; static private void ThrowIfPathNotExists(string path) { if (!Directory.Exists(path)) { throw new DupuitStateFilerException(String.Format("Path '{0}' not found", path)); } } static private void CreateDirectoryIfNotExists(string pathName) { if (!Directory.Exists(pathName)) { Directory.CreateDirectory(pathName); } } static public void SaveState(string sourcePath, string destinationPath, string extension) { ThrowIfPathNotExists(sourcePath); CreateDirectoryIfNotExists(destinationPath); CopyFiles(sourcePath, destinationPath, extension, endStateExtension); } private static void CopyFiles(string sourcePath, string destinationPath, string sourceExtension, string destinationExtension) { string[] fileEntries = Directory.GetFiles(sourcePath, "*" + sourceExtension); foreach (string fileEntry in fileEntries) { string sourceFilename = Path.GetFileName(fileEntry); string destinationFilename = Path.Combine(destinationPath, Path.ChangeExtension(sourceFilename, destinationExtension)); if (File.Exists(destinationFilename)) { File.Delete(destinationFilename); } File.Copy(fileEntry, destinationFilename); } } static public void LoadState(string sourcePath, string destinationPath, string stateExtension) { ThrowIfPathNotExists(sourcePath); CreateDirectoryIfNotExists(destinationPath); CopyFiles(sourcePath, destinationPath, stateExtension, initialStateExtension); } /// /// Gets the last state extension; this is the extension with the highest number /// /// The source path. /// The extension mask. /// static public string GetLastStateExtension(string sourcePath, string fileStateMask) { string[] fileEntries = Directory.GetFiles(sourcePath, fileStateMask); List fileEntriesList = fileEntries.ToList(); fileEntriesList.Sort(); string extension = Path.GetExtension(fileEntriesList.Last()); return extension; } } }