static public void Save(string storageDir = null)
 {
     storageDir = storageDir != null ? storageDir : DefaultStorageDir;
     if (ReadOnly && PathRoutines.ArePathsEqual(storageDir, StorageDir))
     {
         throw new Exception("Config is read-only and cannot be saved to the same location.");
     }
     StorageDir = storageDir;
     lock (objectFullNames2serializable)
     {
         foreach (Serializable s in objectFullNames2serializable.Values)
         {
             s.Save(StorageDir + System.IO.Path.DirectorySeparatorChar + PathRoutines.GetFileNameFromPath(s.__File));
         }
     }
 }
 static public void CopyFiles(string toDirectory)
 {
     lock (objectFullNames2serializable)
     {
         string d = FileSystemRoutines.CreateDirectory(toDirectory + System.IO.Path.DirectorySeparatorChar + CONFIG_FOLDER_NAME);
         foreach (Serializable s in objectFullNames2serializable.Values)
         {
             if (File.Exists(s.__File))//it can be absent if default settings used still
             {
                 File.Copy(s.__File, d + System.IO.Path.DirectorySeparatorChar + PathRoutines.GetFileNameFromPath(s.__File));
             }
         }
     }
 }