C# copiar archivo en especifico

Iniciado por SrTrp, 7 Marzo 2019, 02:52 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

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 (csharp) [Seleccionar]


string nombrecar = "C:\\carpeta\otracar\guardaaqui";//guardaaqui es la carpeta que creara

            if (!(Directory.Exists(nombrecar)))
            {
                Directory.CreateDirectory(nombrecar);
                FileInfo file = new FileInfo(c:\escritorio\carpeta\archivo.doc);
                file.CopyTo(nombrecar + "\\" + "archivo.doc");
            }

solo crea la carpeta el archivo no lo copea

ThunderCls

#1
No se si sera un typo cuando copiaste el codigo pero en esta linea:

Código (csharp) [Seleccionar]
FileInfo file = new FileInfo(c:\escritorio\carpeta\archivo.doc);

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

Código (csharp) [Seleccionar]
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 (csharp) [Seleccionar]
            string nombrecar = @"c:\carpeta\otracar\guardaaqui";
            string nombrearchivo = @"c:\escritorio\carpeta\archivo.doc";

            try
            {
        if (!(Directory.Exists(nombrecar)))
            Directory.CreateDirectory(nombrecar);

                FileInfo file = new FileInfo(nombrearchivo);
                if (file.Exists)
            file.CopyTo(nombrecar + "\\" + file.Name, true);
            }
            catch
                MessageBox.Show("Error copiando fichero!");
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

Eleкtro

#2
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 (csharp) [Seleccionar]

// Source file.
FileInfo srcFile = new FileInfo(@"C:\Archivo.ext");

// Destination directory.
DirectoryInfo dstDir = new DirectoryInfo(@"C:\Directorio\");

// Destination file.
FileInfo dstFile = new FileInfo(Path.Combine(dstDir.FullName, srcFile.Name));

try {
dstDir.Create();
srcFile.CopyTo(dstFile.FullName);

} catch (Exception ex) {
throw;

}


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 (csharp) [Seleccionar]
// Source file path.
string srcFilePath = @"C:\Archivo.ext";

// Destination directory path.
string dstDirPath = @"C:\Directorio\";

// Destination file path.
string dstFilePath = Path.Combine(dstDirPath, Path.GetFileName(srcFilePath));

try {
Directory.CreateDirectory(dstDirPath);
File.Copy(srcFilePath, dstFilePath, overwrite:false);

} catch (Exception ex) {
throw;

}


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.