visual una ruta otra obtener mover guardar especifica eliminar ejemplo directorio copiar carpeta buscar archivos archivo c# .net file-access file-copying

una - obtener archivos de un directorio c#



Cómo copiar un archivo mientras está siendo usado por otro proceso (5)

Bueno, otra opción es copiar el archivo bloqueado en algún lugar utilizando la clase de proceso e invocar CMD para usar el comando "copiar". En la mayoría de los casos, el comando "copiar" podrá hacer una copia del archivo, incluso si está en uso por otro proceso, evitando el problema de copia de archivo C #.

Ejemplo:

try { File.Copy(somefile) } catch (IOException e) { if (e.Message.Contains("in use")) { Process.StartInfo.UseShellExecute = false; Process.StartInfo.RedirectStandardOutput = true; Process.StartInfo.FileName = "cmd.exe"; Process.StartInfo.Arguments = "/C copy /"" + yourlockedfile + "/" /"" + destination + "/""; Process.Start(); Console.WriteLine(Process.StandardOutput.ReadToEnd()); Proess.WaitForExit(); Process.Close(); } } the try/catch should be added on top of your current try/catch to handle the file in use exception to allow your code to continue...

¿Es posible copiar un archivo que está siendo usado por otro proceso al mismo tiempo?

Lo pregunto porque cuando intento copiar el archivo utilizando el siguiente código, se genera una excepción:

System.IO.File.Copy(s, destFile, true);

La excepción planteada es:

El proceso no puede acceder al archivo ''D: / temp / 1000000045.zip'' porque está siendo usado por otro proceso.

No quiero crear un archivo nuevo, solo quiero copiarlo o borrarlo. es posible?


Debes explorar y descubrir qué proceso está bloqueando el archivo. Si este proceso no es tuyo, no tienes forma de resolver el problema. Por supuesto, puede aplicar algunos hacks y liberar manualmente el bloqueo de archivos, pero es muy probable que este enfoque lleve a consecuencias insospechadas. Si el proceso es suyo, intente desbloquear el archivo o bloquearlo con acceso de lectura compartida.

[EDITAR]
La forma más fácil de descubrir el proceso del bloqueador sería usar Process Explorer. Lánzelo e ingrese el nombre del archivo en el cuadro de diálogo Find->Find Handle or DLL... En los resultados de la búsqueda, podrá ver qué proceso está bloqueando su archivo. También puede hacer este trabajo en C # verifique esto: ¿Qué proceso bloquea un archivo? . también


No tu no puedes Algunos programas no bloquean el archivo para su lectura, pero si lo hacen, no puede acceder al archivo sin matar al otro programa.


Para crear una copia de un archivo que está bloqueado para lectura y / o escritura por otro proceso en Windows, la solución más simple (y probablemente la única) es usar el Servicio de instantáneas de volumen (VSS).

El servicio de instantáneas de volumen es complejo y difícil de llamar desde un código administrado. Afortunadamente, algunos capítulos finos han creado una biblioteca de clases .NET para hacer precisamente esto. Consulte el proyecto Alpha VSS en CodePlex: http://alphavss.codeplex.com .

EDITAR

Al igual que con muchos de los proyectos en CodePlex, Alpha VSS ha migrado a GitHub. El proyecto ya está aquí: https://github.com/alphaleonis/AlphaVSS .


Un ejemplo (nota: acabo de combinar dos resultados de google, puede que tenga que corregir errores menores;))

La parte importante es FileShare.ReadWrite al abrir FileStream.

Utilizo un código similar para abrir y leer documentos de Excel mientras que Excel todavía está abierto y bloqueando el archivo.

using(var inputFile = new FileStream( "oldFile.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (var outputFile = new FileStream("newFile.txt", FileMode.Create)) { var buffer = new byte[0x10000]; int bytes; while ((bytes = inputFile.Read(buffer, 0, buffer.Length)) > 0) { outputFile.Write(buffer, 0, bytes); } } }