none
Error en el reemplazo de ficheros

    Pregunta

  • Hola,

    Tengo el siguiente código donde quiero reemplazar dos ficheros, es decir dos imágenes, y poner el uno en el lugar del otro. El problema es que me da el siguiente error: The process cannot access the file '\\datosh\Escaneos\DNIAnverso_16092213143201.jpg' because it is being used by another process.

    Dim anverso As String = btGirar.Tag
    Dim reverso As String = Nothing

    reverso = anverso.Replace("Anverso", "Reverso")

    Dim tmp As String = Path.GetTempFileName()
    File.Copy(anverso, tmp, True)
    File.Copy(reverso, oanverso, True)
    File.Copy(tmp, reverso, True)
    File.Delete(tmp)

    Me podeis ayudar,

    Gracias de antemano

    jueves, 22 de septiembre de 2016 11:39

Respuestas

  • Deberías hacer un algoritmo parecido (usar un nombre temporal)

    Dim tmp As String = Path.GetTempFileName()
    
    FileSystem.Rename(anverso, tmp)
    FileSystem.Rename(reverso, anverso)
    FileSystem.Rename(tmp, reverso)

    DE todas formas asegurate que el resultado de 

    Dim tmp As String = Path.GetTempFileName()

    sea una ruta de un fichero que no exista, tal vez es ese tu problema inicial


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 22 de septiembre de 2016 13:24

Todas las respuestas

  • ¿En cual de las líneas te da el error? Ninguna de esas líneas bloque al archivo en disco. ¿Puede ser que se esté bloqueando desde otro punto de la aplicación?

    Pon un punto de interrupción en la primera línea e intenta modificar el nombre de ese archivo desde el explorador de Windows, si no te deja es que el archivo ya está bloqueado por otro proceso antes de hacer la copia.


    Saludos, Javier J

    jueves, 22 de septiembre de 2016 11:59
  • Mmm.... qué desear obtener? Es simplemente un cambio de nombre? Por qué no realizas un FileSystem.RenameFile (String, String)??  Como ves este método se encuentra en el espacion de nombre Microsoft.VisualBasic.FileIO

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Javier Jiménez jueves, 22 de septiembre de 2016 12:11
    jueves, 22 de septiembre de 2016 12:06
  • El error me da al intentar hacer File.Copy(reverso, anverso, True)

    jueves, 22 de septiembre de 2016 12:22
  • ¿No será que la cadena anverso es igual a la cadena reverso? De todas formas también te aconsejo que, después de asegurarte que no estás queriendo renombrar con el mismo nombre, uses la idea de Sergio Parra de utilizar RenameFile que es más cómodo y elegante.

    Saludos, Javier J

    jueves, 22 de septiembre de 2016 12:27
  • Si intento hacer FileSystem.Rename(anverso, reverso), me da el siguiente error: File already exists. Además, el anverso no es igual que el reverso

    jueves, 22 de septiembre de 2016 12:46
  • Deberías hacer un algoritmo parecido (usar un nombre temporal)

    Dim tmp As String = Path.GetTempFileName()
    
    FileSystem.Rename(anverso, tmp)
    FileSystem.Rename(reverso, anverso)
    FileSystem.Rename(tmp, reverso)

    DE todas formas asegurate que el resultado de 

    Dim tmp As String = Path.GetTempFileName()

    sea una ruta de un fichero que no exista, tal vez es ese tu problema inicial


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 22 de septiembre de 2016 13:24
  • Muchas gracias era eso, que al obtener el Path.GetTempFileName(), te crea el fichero. Al final lo he solucionadode este modo:

    Dim tmp As String = Path.GetTempFileName()
    If File.Exists(tmp) Then File.Delete(tmp)
    FileSystem.Rename(anverso, tmp)
    FileSystem.Rename(reverso, anverso)
    FileSystem.Rename(tmp, reverso)
    File.Delete(tmp)


    • Editado nere_neria jueves, 22 de septiembre de 2016 14:16
    jueves, 22 de septiembre de 2016 13:52
  • Hola. Puedes cerrar la pregunta marcando la respuesta? Gracias

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 22 de septiembre de 2016 19:57