visual metodo ejemplo delete copiar archivos c# file copy

ejemplo - metodo copy en c#



Acerca de los permisos de archivos en C# (3)

Al crear un programa de sincronización de archivos en C # intenté hacer una copy método en la clase LocalFileItem que utiliza el método System.IO.File.Copy(destination.Path, Path, true) donde Path es una string .
Después de ejecutar este código con destino. Path = "C://Test2" y this.Path = "C://Test//F1.txt" Recibo una excepción que dice que no tengo los permisos de archivo necesarios para realizar esta operación en C: / Test , pero C: / Test es propiedad de mí mismo (el usuario actual) .
¿Alguien sabe lo que está pasando o cómo evitarlo?

Aquí está el código original completo.

using System; using System.Collections.Generic; using System.Text; using System.IO; namespace Diones.Util.IO { /// <summary> /// An object representation of a file or directory. /// </summary> public abstract class FileItem : IComparable { protected String path; public String Path { set { this.path = value; } get { return this.path; } } protected bool isDirectory; public bool IsDirectory { set { this.isDirectory = value; } get { return this.isDirectory; } } /// <summary> /// Delete this fileItem. /// </summary> public abstract void delete(); /// <summary> /// Delete this directory and all of its elements. /// </summary> protected abstract void deleteRecursive(); /// <summary> /// Copy this fileItem to the destination directory. /// </summary> public abstract void copy(FileItem fileD); /// <summary> /// Copy this directory and all of its elements /// to the destination directory. /// </summary> protected abstract void copyRecursive(FileItem fileD); /// <summary> /// Creates a FileItem from a string path. /// </summary> /// <param name="path"></param> public FileItem(String path) { Path = path; if (path.EndsWith("//") || path.EndsWith("/")) IsDirectory = true; else IsDirectory = false; } /// <summary> /// Creates a FileItem from a FileSource directory. /// </summary> /// <param name="directory"></param> public FileItem(FileSource directory) { Path = directory.Path; } public override String ToString() { return Path; } public abstract int CompareTo(object b); } /// <summary> /// A file or directory on the hard disk /// </summary> public class LocalFileItem : FileItem { public override void delete() { if (!IsDirectory) File.Delete(this.Path); else deleteRecursive(); } protected override void deleteRecursive() { Directory.Delete(Path, true); } public override void copy(FileItem destination) { if (!IsDirectory) File.Copy(destination.Path, Path, true); else copyRecursive(destination); } protected override void copyRecursive(FileItem destination) { Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory( Path, destination.Path, true); } /// <summary> /// Create''s a LocalFileItem from a string path /// </summary> /// <param name="path"></param> public LocalFileItem(String path) : base(path) { } /// <summary> /// Creates a LocalFileItem from a FileSource path /// </summary> /// <param name="path"></param> public LocalFileItem(FileSource path) : base(path) { } public override int CompareTo(object obj) { if (obj is FileItem) { FileItem fi = (FileItem)obj; if (File.GetCreationTime(this.Path).CompareTo (File.GetCreationTime(fi.Path)) > 0) return 1; else if (File.GetCreationTime(this.Path).CompareTo (File.GetCreationTime(fi.Path)) < 0) return -1; else { if (File.GetLastWriteTime(this.Path).CompareTo (File.GetLastWriteTime(fi.Path)) < 0) return -1; else if (File.GetLastWriteTime(this.Path).CompareTo (File.GetLastWriteTime(fi.Path)) > 0) return 1; else return 0; } } else throw new ArgumentException("obj isn''t a FileItem"); } } }


Estoy adivinando aquí, pero podría ser porque:

  • Está intentando realizar operaciones de archivos en C: root? (Puede haber protección en esto por Vista si lo está usando, ¿no está seguro?)
  • Está intentando copiar a un directorio inexistente?
  • El archivo ya existe y puede estar bloqueado? (es decir, no ha cerrado otra instancia de la aplicación)?

Lo siento, no puedo ser de más ayuda, rara vez he tenido problemas con File.Copy.


Parece que ha perdido los parámetros en File.Copy (), debería ser File.Copy (fuente de cadena, destino de cadena).

¿También es "C: / Test2" un directorio? No puedes copiar el archivo a un directorio. Use algo así en su lugar:

File.Copy( sourceFile, Path.Combine(destinationDir,Path.GetFileName(sourceFile)) ) ;


Pude resolver el problema, Michal me indicó la dirección correcta. El problema fue que traté de usar File.Copy para copiar un archivo de una ubicación a otra, mientras que el método Copy solo copió todos los contenidos de un archivo a otro (creando el archivo de destino si aún no existe). La solución fue agregar el nombre del archivo al directorio de destino. ¡Gracias por toda la ayuda!