none
Copiar un archivo con dialog en WPF RRS feed

  • Pregunta

  • Que tal amigos, me preguntaba si alguno tiene información de cómo copiar un archivo con un cuadro de diálogo  y desde luego cambiar el nombre, por consiguiente poder obtener el nombre del archivo y su extensión para estos manipularlos en otros procesos.  La carpeta donde se guardará siempre será la misma, la cual se define en la aplicación. 

    Es con C# en WPF.

    Gracias de antemano. 


    • Editado SamuelMX miércoles, 4 de abril de 2012 14:41
    • Cambiado Leandro TuttiniMVP miércoles, 4 de abril de 2012 15:02 (De:Lenguaje C#)
    miércoles, 4 de abril de 2012 14:38

Respuestas

  • Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); //dlg.FileName = "Document"; // Default file name //dlg.DefaultExt = ".txt"; // Default file extension //dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension //dlg.Title = "Guardar Archivo"; // Show open file dialog box Nullable<bool> result = dlg.ShowDialog(); string fileName = dlg.SafeFileName; string sourcePath = System.IO.Path.GetDirectoryName(dlg.FileName); string targetPath = @"C:\Users\Tunombre\Documentos"; string sourceFile = System.IO.Path.Combine(sourcePath, fileName); string destFile = System.IO.Path.Combine(targetPath, fileName); string extension; // Process open file dialog box results if (result == true) { System.IO.File.Copy(sourceFile, destFile, true);

    extension = System.IO.Path.GetExtension(destFile); } } catch { }

    De esta manera logré solucionarlo, lo comparto por si les puede ser útil, gracias Miguel.  



    • Editado SamuelMX miércoles, 4 de abril de 2012 16:09
    • Marcado como respuesta SamuelMX miércoles, 4 de abril de 2012 16:51
    miércoles, 4 de abril de 2012 16:08

Todas las respuestas

  • Buenas Samuel, puedes usar el siguiente ejemplo como punto de partida.

    Codigo XAML (CopyFileWindow.xaml):

    <Window x:Class="WpfApplication1.CopyFileWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="CopyFileWindow" Height="480" Width="640" WindowStartupLocation="CenterScreen">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="100"/>
            </Grid.ColumnDefinitions>
            
            <Grid.RowDefinitions>
                <RowDefinition Height="25"/>
                <RowDefinition Height="25"/>
                <RowDefinition Height="25"/>
                <RowDefinition Height="50"/>
            </Grid.RowDefinitions>
    
            <TextBlock Grid.Row="0" Grid.Column="0" Text="Archivo a copiar"/>
            <TextBox Grid.Row="0" Grid.Column="1" Name="tbxArchivo" IsReadOnly="True"/>
            <Button Grid.Row="0" Grid.Column="2" Click="SeleccionarArchivoButton_Click">Seleccionar archivo</Button>
    
            <TextBlock Grid.Row="1" Grid.Column="0" Text="Carpeta de destino"/>
            <TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Name="tbxCarpetaDestino" Text="C:\Samples" IsReadOnly="True"/>
    
            <TextBlock Grid.Row="2" Grid.Column="0" Text="Nombre del archivo destino"/>
            <TextBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Name="tbxNombreArchivoDestino"/>
    
            <Button Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" Margin="10" Width="100" HorizontalAlignment="Center" Click="CopiarButton_Click">Copiar</Button>
    
        </Grid>
    </Window>
    

    Código C# (CopyFileWindow.xaml.cs):

    using System.IO;
    using System.Windows;
    using Microsoft.Win32;
    
    namespace WpfApplication1
    {
        public partial class CopyFileWindow : Window
        {
            public CopyFileWindow()
            {
                this.InitializeComponent();
            }
    
            private void SeleccionarArchivoButton_Click(object sender, RoutedEventArgs e)
            {
                var dialog = new OpenFileDialog();
                dialog.Multiselect = false;
                if (dialog.ShowDialog(this) == true)
                {
                    this.tbxArchivo.Text = dialog.FileName;
                    this.tbxNombreArchivoDestino.Text = Path.GetFileName(dialog.FileName);
                }
            }
    
            private void CopiarButton_Click(object sender, RoutedEventArgs e)
            {
                if (!File.Exists(this.tbxArchivo.Text) ||
                    !Path.HasExtension(this.tbxArchivo.Text))
                {
                    MessageBox.Show(this, "El archivo de origen no existe o no tiene extensión.", this.Title);
                }
                else if (!Directory.Exists(this.tbxCarpetaDestino.Text))
                {
                    MessageBox.Show(this, "La carpeta de destino no existe.", this.Title);
                }
                else if (!Path.HasExtension(this.tbxNombreArchivoDestino.Text))
                {
                    MessageBox.Show(this, "El archivo de destino no tiene extensión o el nombre no es válido.", this.Title);
                }
                else if (Path.GetExtension(this.tbxArchivo.Text).ToLower() != Path.GetExtension(this.tbxNombreArchivoDestino.Text).ToLower() &&
                         MessageBox.Show(this, "Vas a cambiar la extensión del archivo de destino, ¿Estás seguro?", this.Title, MessageBoxButton.YesNo) != MessageBoxResult.Yes)
                {
                    return;
                }
    
                try
                {
                    File.Copy(this.tbxArchivo.Text, Path.Combine(this.tbxCarpetaDestino.Text, this.tbxNombreArchivoDestino.Text));
                    MessageBox.Show(this, "Archivo copiado correctamente.", this.Title);
                }
                catch
                {
                    MessageBox.Show(this, "Ha ocurrido un error al intentar copiar el archivo.", this.Title);
                }
            }
        }
    }
    

    Un saludo,

    Miguel.

    miércoles, 4 de abril de 2012 15:42
  • Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); //dlg.FileName = "Document"; // Default file name //dlg.DefaultExt = ".txt"; // Default file extension //dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension //dlg.Title = "Guardar Archivo"; // Show open file dialog box Nullable<bool> result = dlg.ShowDialog(); string fileName = dlg.SafeFileName; string sourcePath = System.IO.Path.GetDirectoryName(dlg.FileName); string targetPath = @"C:\Users\Tunombre\Documentos"; string sourceFile = System.IO.Path.Combine(sourcePath, fileName); string destFile = System.IO.Path.Combine(targetPath, fileName); string extension; // Process open file dialog box results if (result == true) { System.IO.File.Copy(sourceFile, destFile, true);

    extension = System.IO.Path.GetExtension(destFile); } } catch { }

    De esta manera logré solucionarlo, lo comparto por si les puede ser útil, gracias Miguel.  



    • Editado SamuelMX miércoles, 4 de abril de 2012 16:09
    • Marcado como respuesta SamuelMX miércoles, 4 de abril de 2012 16:51
    miércoles, 4 de abril de 2012 16:08