/// <summary> /// сохранение файла. /// </summary> /// <param name="type"></param> /// <returns></returns> public bool SaveDocument(SaveType type) { string newFileName = this.fileName; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = fileDlgFilter; if ((type == SaveType.SaveAs) || Empty(newFileName)) { if (!Empty(newFileName)) { saveFileDialog1.InitialDirectory = Path.GetDirectoryName(newFileName); saveFileDialog1.FileName = Path.GetFileName(newFileName); } else { saveFileDialog1.InitialDirectory = fileDlgInitDir; saveFileDialog1.FileName = newDocName; } DialogResult res = saveFileDialog1.ShowDialog(frmOwner); if (res != DialogResult.OK) { return(false); } newFileName = saveFileDialog1.FileName; fileDlgInitDir = new FileInfo(newFileName).DirectoryName; } // записываем данные try { using (Stream stream = new FileStream( newFileName, FileMode.Create, FileAccess.Write)) { // Serialize object to text format IFormatter formatter = new BinaryFormatter(); if (SaveEvent != null) { SerializationEventArgs args = new SerializationEventArgs( formatter, stream, newFileName); //вызов события SaveEvent(this, args); if (args.Error) { return(false); } } } } catch (ArgumentNullException ex) { return(HandleSaveException(ex, newFileName)); } catch (ArgumentOutOfRangeException ex) { return(HandleSaveException(ex, newFileName)); } catch (ArgumentException ex) { return(HandleSaveException(ex, newFileName)); } catch (SecurityException ex) { return(HandleSaveException(ex, newFileName)); } catch (FileNotFoundException ex) { return(HandleSaveException(ex, newFileName)); } catch (DirectoryNotFoundException ex) { return(HandleSaveException(ex, newFileName)); } catch (PathTooLongException ex) { return(HandleSaveException(ex, newFileName)); } catch (IOException ex) { return(HandleSaveException(ex, newFileName)); } Dirty = false; SetFileName(newFileName); return(true); }
/// <summary> /// открыть док /// </summary> /// <param name="newFileName"> /// имя документа. пусто-функция показывает диалог открытия файла. /// </param> /// <returns></returns> public bool OpenDocument(string newFileName) { // проверка: можно закрыть текущий файл? if (!CloseDocument()) { return(false); } // берем файл чтоб открыть if (Empty(newFileName)) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = fileDlgFilter; openFileDialog1.InitialDirectory = fileDlgInitDir; DialogResult res = openFileDialog1.ShowDialog(frmOwner); if (res != DialogResult.OK) { return(false); } newFileName = openFileDialog1.FileName; fileDlgInitDir = new FileInfo(newFileName).DirectoryName; } // считываем данные try { using (Stream stream = new FileStream( newFileName, FileMode.Open, FileAccess.Read)) { // Deserialize object from text format IFormatter formatter = new BinaryFormatter(); if (LoadEvent != null) // if caller subscribed to this event { SerializationEventArgs args = new SerializationEventArgs( formatter, stream, newFileName); // raise event to load document from file LoadEvent(this, args); if (args.Error) { // report failure if (OpenEvent != null) { OpenEvent(this, new OpenFileEventArgs(newFileName, false)); } return(false); } // raise event to show document in the window if (DocChangedEvent != null) { DocChangedEvent(this, new EventArgs()); } } } } // ловим все возможные исключения. // invoked by LoadEvent and DocChangedEvent. catch (ArgumentNullException ex) { return(HandleOpenException(ex, newFileName)); } catch (ArgumentOutOfRangeException ex) { return(HandleOpenException(ex, newFileName)); } catch (ArgumentException ex) { return(HandleOpenException(ex, newFileName)); } catch (SecurityException ex) { return(HandleOpenException(ex, newFileName)); } catch (FileNotFoundException ex) { return(HandleOpenException(ex, newFileName)); } catch (DirectoryNotFoundException ex) { return(HandleOpenException(ex, newFileName)); } catch (PathTooLongException ex) { return(HandleOpenException(ex, newFileName)); } catch (IOException ex) { return(HandleOpenException(ex, newFileName)); } // чистим все грязное Dirty = false; SetFileName(newFileName); if (OpenEvent != null) { // успех? OpenEvent(this, new OpenFileEventArgs(newFileName, true)); } // успех. return(true); }