TOC

This article has been localized into Spanish by the community.

Diálogos:

El diálogo de guardado SaveFileDialog

El SaveFileDialog te ayudará a seleccionar una ubicación y asignar nombre cuando desees guardar un archivo. Funciona y luce como el OpenFileDialog, el cual usamos en el artículo anterior, con algunas diferencias sutiles. Justo como el OpenFileDialog, el SaveFileDialog es un contenedor de una ventana de dialogo común de Windows, esto significa que los usuarios verán más o menos el mismo dialogo, ya sea que lo abran en tu aplicación o (por ejemplo) en Notepad.

Un ejemplo simple del SaveFileDialog

Para aclarar lo anteriormente expuesto, empecemos con un simple ejemplo del uso del SaveFileDialog:

<Window x:Class="WpfTutorialSamples.Dialogs.SaveFileDialogSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SaveFileDialogSample" Height="300" Width="300">
    <DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnSaveFile" Click="btnSaveFile_Click">Save file</Button>
        </WrapPanel>
        <TextBox Name="txtEditor" TextWrapping="Wrap" AcceptsReturn="True" ScrollViewer.VerticalScrollBarVisibility="Auto" />
    </DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;

namespace WpfTutorialSamples.Dialogs
{
	public partial class SaveFileDialogSample : Window
	{
		public SaveFileDialogSample()
		{
			InitializeComponent();
		}

		private void btnSaveFile_Click(object sender, RoutedEventArgs e)
		{
			SaveFileDialog saveFileDialog = new SaveFileDialog();
			if(saveFileDialog.ShowDialog() == true)
				File.WriteAllText(saveFileDialog.FileName, txtEditor.Text);
		}
	}
}

Como puedes ver, se basa principalmente en inicializar el SaveFileDialog y despúes llamar al método ShowDialog(). Si regresa verdadero, usamos la propiedad FileName (la cual, contendrá tanto la ruta seleccionada, como el nombre del archivo definido por el usuario) como la ruta donde se escribirá contenido.

Si presionas el botón de guardar, deberías ver una ventana de dialogo como esta (depende de tu versión de Windows):

Filtro

Cómo puedes ver en el primer ejemplo, manualmente agregué la extensión .txt al nombre del archivo, principalmente porque el selector "Tipo" está vacío. Justo como el OpenFileDialog, este selector es controlado a través de la propiedad Filter, y también es utilizado de la misma manera.

saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";

Para más detalles sobre el formato de la propiedad Filter, favor de consultar el artículo anterior en el OpenFileDialog, dónde se explica con más detalle.

Con un filtro como en el ejemplo anterior, el resultado del SaveFileDialog lucirá de la siguiente manera:

Con lo anterior, puedes escribir el nombre del archivo sin especificar la extensión (lo tomará del selector "tipo de archivo"). Esto sirve también, para indicar cuales son los formatos compatibles, lo cual por supuesto es importante.

Configura la dirección inicial

La dirección inicial usada por el SaveFileDialog es decidida por Windows, pero usando la propiedad InitialDirectory , puedes sobrescribir la. Usualmente asignarás este valor apuntando a una dirección específica del usuario, a la carpeta de la aplicación o quizá la última dirección usada. Puedes asignarle una dirección un en formato string, como el siguiente:

saveFileDialog.InitialDirectory = @"c:\temp\";

Si deseas usar una carpeta especial en Windows, por ejemplo, el Escritorio, Mis documentos o la dirección Archivos de programa, necesitas realizar acciones especiales, ya que esto puede variar dependiendo de la versión de Windows y de acuerdo al usuario en línea. El framework .NET puede guiarte, solo utliiza la clase Enviorment y sus miembros para lidiar con las carpetas especiales:

saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

En este caso, obtengo la dirección para Mis Documentos, pero si miramos a la enumeración SpecialFolder, contiene valores para muchas direcciones interesantes. Para obtener la lista completa, favor de revisar este link: MSDN article.

Opciones

Además de las opciones ya mencionadas en este artículo, quiero puntualizar las siguientes propiedades, las cuales te ayudarán a configurar el SaveFileDialog a tus necesidades:

AddExtension- el valor por defecto es verdadero y determina si el SaveFileDialog debería automáticamente agregar una extensión al nombre del archivo, si el usuario la omite.- La extensión se basará en la opción seleccionada en el filtro, a menos que ese no sea el caso, se le asignará la propiedad DefaultExt (si está especificado). Si deseas que tu aplicación sea capaz de guardar archivos sin extensión, debes deshabilitar esta opción.

OverwritePrompt - el valor por defecto es verdadero y determina si el SaveFileDialog debería hacer una confirmación si el usuario ingresa un nombre para su archivo y guardarlo provocaría sobrescribir algún otro archivo. Usualmente se requiere mantener esta opción habilitada excepto en situaciones muy especiales.

Title - Debes sobreescribir esta propiedad si quieres un título personalizado en tu diálogo. Por defecto el título es "Guardar como" o el equivalente localizado. Esto es también válido para OpenFileDialog.

ValidateNames - Por defecto es true y salvo que este deshabilitado, garantiza que el usuario solo introduzca nombres validos de archivos de Windows antes de permitirle continuar.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!