Principales respuestas
Copiar un archivo con dialog en WPF

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#)
Respuestas
-
De esta manera logré solucionarlo, lo comparto por si les puede ser útil, gracias Miguel.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 { }
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.
-
De esta manera logré solucionarlo, lo comparto por si les puede ser útil, gracias Miguel.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 { }