Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SrTrp en 7 Marzo 2019, 02:52 am



Título: C# copiar archivo en especifico
Publicado por: SrTrp en 7 Marzo 2019, 02:52 am
Necesito copiar 1 archivo en especifico yo lo selecciono y obtengo la ruta de el así c:\escritorio\carpeta\archivo.doc
pero eh estado intentando de copiarlo algo así
Código
  1.  
  2. string nombrecar = "C:\\carpeta\otracar\guardaaqui";//guardaaqui es la carpeta que creara
  3.  
  4.            if (!(Directory.Exists(nombrecar)))
  5.            {
  6.                Directory.CreateDirectory(nombrecar);
  7.                FileInfo file = new FileInfo(c:\escritorio\carpeta\archivo.doc);
  8.                file.CopyTo(nombrecar + "\\" + "archivo.doc");
  9.            }
solo crea la carpeta el archivo no lo copea


Título: Re: C# copiar archivo en especifico
Publicado por: ThunderCls en 7 Marzo 2019, 04:12 am
No se si sera un typo cuando copiaste el codigo pero en esta linea:

Código
  1. FileInfo file = new FileInfo(c:\escritorio\carpeta\archivo.doc);

La ruta del fichero es una cadena asi que necesitas usar ""

Código
  1. FileInfo file = new FileInfo(@"c:\escritorio\carpeta\archivo.doc");

Edit:
1- Olvide mencionar que en tu logica si existe la carpeta con anterioridad no se copiaria el fichero. Si no es el comportamiento que deseas necesitas modificar tus {}
2- Cuando trabajes con ficheros es siempre recomendable usar un manejador de excepciones


Código
  1.            string nombrecar = @"c:\carpeta\otracar\guardaaqui";
  2.            string nombrearchivo = @"c:\escritorio\carpeta\archivo.doc";
  3.  
  4.            try
  5.            {
  6.        if (!(Directory.Exists(nombrecar)))
  7.            Directory.CreateDirectory(nombrecar);
  8.  
  9.                FileInfo file = new FileInfo(nombrearchivo);
  10.                if (file.Exists)
  11.            file.CopyTo(nombrecar + "\\" + file.Name, true);
  12.            }
  13.            catch
  14.                MessageBox.Show("Error copiando fichero!");


Título: Re: C# copiar archivo en especifico
Publicado por: Eleкtro en 7 Marzo 2019, 10:44 am
No es necesario usar la clase FileInfo a menos que quieras representar la información de un archivo en la interfaz gráfica, o acceder a dicha información para otros usos, en cuyo caso también sería conveniente usar la clase DirectoryInfo en vez de mezclar declaraciones de tipo string con instancias de la clase FileInfo...

Código
  1. // Source file.
  2. FileInfo srcFile = new FileInfo(@"C:\Archivo.ext");
  3.  
  4. // Destination directory.
  5. DirectoryInfo dstDir = new DirectoryInfo(@"C:\Directorio\");
  6.  
  7. // Destination file.
  8. FileInfo dstFile = new FileInfo(Path.Combine(dstDir.FullName, srcFile.Name));
  9.  
  10. try {
  11. dstDir.Create();
  12. srcFile.CopyTo(dstFile.FullName);
  13.  
  14. } catch (Exception ex) {
  15. throw;
  16.  
  17. }

Si por lo contrario tu única intención es usar el método FileInfo.CopyTo(), crear una instancia de la clase FileInfo como ya dije es completamente inadecuado e innecesario. En su lugar puedes usar el método System.IO.File.Copy()...

Código
  1. // Source file path.
  2. string srcFilePath = @"C:\Archivo.ext";
  3.  
  4. // Destination directory path.
  5. string dstDirPath = @"C:\Directorio\";
  6.  
  7. // Destination file path.
  8. string dstFilePath = Path.Combine(dstDirPath, Path.GetFileName(srcFilePath));
  9.  
  10. try {
  11. Directory.CreateDirectory(dstDirPath);
  12. File.Copy(srcFilePath, dstFilePath, overwrite:false);
  13.  
  14. } catch (Exception ex) {
  15. throw;
  16.  
  17. }

Nótese que no es necesario comprobar si el directorio existe o no, de eso ya se encarga el método DirectoryInfo.Create() o Directory.CreateDirectory(), los cuales no lanzarán ninguna excepción si el directorio ya fue creado con anterioridad.

Saludos.