Как я могу сохранить и открыть файл в winForms? - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть это приложение, где я использую windowsForm и UserControl для рисования некоторых диаграмм.После этого я хочу сохранить их или открыть существующий файл, который я создал ранее, и продолжить работу над диаграммой.Итак, я хочу использовать диалог сохранения и открытия файла, чтобы сохранить или открыть мои диаграммы.


РЕДАКТИРОВАТЬ:

это то, что у меня есть:

    //save the object to the file

    public bool ObjectToFile(Object model, string FileName)
    {
        try
        {
            System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream();
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter  _BinaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            _BinaryFormatter.Serialize(_MemoryStream, model);

            byte[] _ByteArray = _MemoryStream.ToArray();
            System.IO.FileStream _FileStream = new System.IO.FileStream(FileName,         System.IO.FileMode.Create, System.IO.FileAccess.Write);
            _FileStream.Write(_ByteArray.ToArray(), 0, _ByteArray.Length);
            _FileStream.Close();

            _MemoryStream.Close();
            _MemoryStream.Dispose();
            _MemoryStream = null;
            _ByteArray = null; 

            return true;

        }
        catch (Exception _Exception)
        {           
            Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
        }
        return false;

    }

//load the object from the file

    public Object FileToObject(string FileName)
    {
        try
        {
            System.IO.FileStream _FileStream = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream);
            long _TotalBytes = new System.IO.FileInfo(FileName).Length;
            byte[] _ByteArray = _BinaryReader.ReadBytes((Int32)_TotalBytes);
            _FileStream.Close();
            _FileStream.Dispose();
            _FileStream = null;
            _BinaryReader.Close();

            System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_ByteArray);
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter _BinaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            _MemoryStream.Position = 0;
            return _BinaryFormatter.Deserialize(_MemoryStream);

        }
        catch (Exception _Exception)
        {
            Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
        }
        return null;
    }

и теперь я хочу сделать это, но это не работает

    public void save()
    {
        SaveFileDialog saveFileDialog1 = new SaveFileDialog();

        saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
        saveFileDialog1.FilterIndex = 2;
        saveFileDialog1.RestoreDirectory = true;

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (saveFileDialog1.OpenFile() != null)
            {
                ObjectToFile(model, saveFileDialog1.FileName);
            }

        }
    }

но если я попытаюсь без fileDialog, и я просто использую

ObjectToFile(model, "d:\\objects.txt");

, это работает.И я хочу сохранить его там, где захочу и под своим именем.

1 Ответ

1 голос
/ 27 февраля 2011

Проверьте классы SaveFileDialog и OpenFileDialog.Они очень похожи и могут использоваться следующим образом:

using(SaveFileDialog sfd = new SaveFileDialog()) {
    sfd.Filter = "Text Files|*.txt|All Files|*.*";
    if(sfd.ShowDialog() != DialogResult.OK) {
        return;
    }

    ObjectToFile(sfd.FileName);
}

Механика фактического сохранения вашего файла, очевидно, выходит за рамки этого ответа.

Редактировать: яобновил мой ответ, чтобы отразить новую информацию в вашем сообщении.

...