public void Execute() { using (Stream stream = File.OpenRead(_fileName)) { try { XMLSerializerEx serializer = new XMLSerializerEx(); _objectLevelManager.GameLevel = (GameLevel)serializer.Deserialize(stream); } catch (Exception ex) { throw new ApplicationException(String.Format("Cannot open level: {0}", ex.Message), ex); } } }
public void Execute() { XDocument doc; try { XMLSerializerEx serializer = new XMLSerializerEx(new List <IXMLCustomSerializer> { new RenderTarget2DXMLSerializer(), new WorldXMLSerializer(), new BodyXMLSerializer(), new FixtureXMLSerializer() }); doc = serializer.Serialize(_level, "GameLevel"); //сохраняет текстуры в temp-папку } catch (Exception ex) { throw new ApplicationException(String.Format("Cannot serialize game level: {0}", ex.Message), ex); } try { using (Stream stream = File.Create(_fileName)) { doc.Save(stream); } //Перемещаем текстуры в текущую папку string currentPath = Path.GetDirectoryName(_fileName) + "\\"; if (Directory.Exists(TextureSerializerSettings.FilePath)) { string[] files = Directory.GetFiles(TextureSerializerSettings.FilePath); foreach (string file in files) { string newFileName = string.Concat(currentPath, Path.GetFileName(file)); //Если файл с таким именем уже существует, то вызываем метод обратного вызова if (File.Exists(newFileName)) { if (_fileExistsCallback != null) { DialogResult dResult = _fileExistsCallback(newFileName); if (dResult == DialogResult.No) { File.Delete(file); continue; } if ((dResult == DialogResult.Cancel) || (dResult == DialogResult.Abort)) { //Возвращаем всё к состоянию до сохранения File.Delete(_fileName); foreach (string file_ in files) { File.Delete(file_); } Directory.Delete(TextureSerializerSettings.FilePath); return; } } File.Delete(newFileName); } File.Move(file, newFileName); } //Удаляем временную директорию из-под текстур Directory.Delete(TextureSerializerSettings.FilePath); } } catch (Exception ex) { throw new ApplicationException(String.Format("Cannot save file: {0}", ex.Message), ex); } }