2016-05-09 3 views
-3

Im пытается сохранить файл из DataGrid с помощью кнопки для него, но я не знаю, как его сохранить, и пользователь может выбрать, где сохранить. Также есть некоторые проблемы с кодом.Как сохранить файл с помощью serialize xml

private void Button_Click_4(object sender, RoutedEventArgs e) 
    { 
     var path = @"C:\\Users\\Tiago\\Documents\\Teste\\Save.xml"; 

      if (serializableObject == null) { return; } 

      try 
      { 
       XmlDocument xmlDocument = new XmlDocument(); 
       XmlSerializer serializer = new XmlSerializer(serializableObject.GetType()); 
       using (MemoryStream stream = new MemoryStream()) 
       { 
        serializer.Serialize(stream, serializableObject); 
        stream.Position = 0; 
        xmlDocument.Load(stream); 
        xmlDocument.Save(path); 
        stream.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 

      } 


    } 

Это то, что я получил сейчас.

+0

Какая ошибка? –

+0

'}' недопустимый термин выражения – Tiago

+0

и serializableObject не существует в текущем контексте – Tiago

ответ

0

Если вы хотите разрешить пользователю выбирать местоположение и имя файла, для вас есть опция SaveFileDialog.

Вот некоторые ссылки, которые могут помочь вам достичь этого:
MSDN Link_1
MSDN Link_2
Link_3

0

using (FileStream fs = new FileStream(path, FileMode.Create) отсутствует )

+0

thx для этого :) – Tiago

+0

@Tiago, если это ошибка, отметьте, что это ответ. :) – Cologler

+0

ошибка все еще существует xD, но u разрешает один из них @Cologler – Tiago

0

Во-первых, у вас отсутствует } вьющийся скобки в конце вашего кода. Это может решить несколько проблем.

Во-вторых,, убедитесь, что ваш serializableObject доступен по событию Button_Click_4. Задайте serializableObject как поле или свойство для доступа к нему.

Чтобы выбрать, где сэкономить Используйте команду FileSaveDialog, чтобы пользователь мог выбрать, где его сохранить.

Создать один:

var fileSaveDialog = new FileSaveDialog(); 

, а затем показать:

fileSaveDialog.ShowDialog(); 

Вы можете использовать имя файла, что FileSaveDialog объект дает, когда «Сохранить» нажата.

Это строка - установите для нее свою переменную path.

Как это:

var path = fileSaveDialog.FileName; 

См http://www.wpf-tutorial.com/dialogs/the-savefiledialog/ хороший учебник по использованию FileSaveDialog.

Примера: (используйте это внутри обработчика событий Button_Click_4)

var saveFileDialog = new SaveFileDialog(); // Create it 

System.Windows.Forms.DialogResult result = saveFileDialog.ShowDialog(); // Show the dialog and set a result (bool) to whether the user clicks "Save" or exits out of the dialog 

if (result == DialogResult.OK) // If the user clicked "Save" 
{ 
    var path = saveFileDialog.FileName; // Set the path to save to 

    // Use the path variable to save the file to disk using your own code 
} 

Надеется, что это помогает!

EDIT:
Не забудьте использовать using Microsoft.Win32; в верхней части вашего кода.

ДРУГОЙ EDIT:
Я обновил код, чтобы уступать result как System.Windows.Forms.DialogResult сравнить result == DialogResult.OK.
См: DialogResult.OK on SaveFileDialog not work

+0

, но он не показывает файл на своем пути – Tiago

+0

Я не понимаю, что вы говорите/спрашиваете ..? –

+0

, когда я сохраняю и закрываю программу, файл, где я его сохранил, is not there – Tiago

0

Чтобы выбрать место сохранения, вы можете использовать System.Windows.Forms.FolderBrowserDialogclass. Но это библиотека WinForm, поэтому вам нужно добавить System.Windows.Forms к вашим проектам.

var dialog = new System.Windows.Forms.FolderBrowserDialog(); 
System.Windows.Forms.DialogResult result = dialog.ShowDialog(); 
+0

Можно также использовать класс 'SaveFileDialog' для выбора прямого пути к файлу. Это просто даст путь к папке. Убедитесь, что вы добавляете имя файла в конец строки пути к папке. –

+0

im make on WPF – Tiago

+0

Необходимо включить 'using Microsoft.Win32;' в верхней части вашего кода –

Смежные вопросы