Visual Basic.NET - El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

 
Vista:

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por Mary (2 intervenciones) el 31/05/2011 17:22:13
Hola...

Espero alguien me pueda ayudar...

Tengo una aplicación en visual basic.net 2008 que manda imprimir un archivo .pdf ya cuando imprime se tiene que adjuntar para ser enviado por correo electronico y asi como moverlo de carpeta, pero en el momento que quiere adjuntarlo me manda el siguiente error.

"El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso"

Gracias de antemano..

Mary
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por angala (3 intervenciones) el 31/05/2011 19:50:36
Esto me paso a mi con algo parecido, yo creaba un archivo y despues lo abria para escribir o leer en el, usa esto tras imprimir el archivo: file.close

Pero tal vez sea porque tarda en imprimirlo, pues calcula el tiempo que tardaria en imprimirlo y usa un timer para cerrar el archivo una vez impreso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por Mary (2 intervenciones) el 31/05/2011 20:06:07
Hola angala

mira es que tengo esto
With New Process
.StartInfo.Verb = "print"
.StartInfo.CreateNoWindow = False
.StartInfo.FileName = filename
.Start()
.WaitForExit(10000)
'.CloseMainWindow()


.Close()
End With

y aparte le daba tiempo y en la parte de adjuntar

Do
Try
miCorreo.Attachments.Add(New System.Net.Mail.Attachment(archivo))
ficheroAdjuntado = True


Catch ex As Exception
contadorEspera += 1
'esperamos (de permanencia) un rato
System.Threading.Thread.Sleep(500)
End Try
Loop Until (contadorEspera = 5 Or ficheroAdjuntado)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por Roberto (3 intervenciones) el 07/07/2011 23:53:17
La función que adjunta el fichero, lo deja abierto. No se porque, pero es así.
La idea general es crear el fichero en memoria y adjuntar ese fichero en memoria con el nombre que quieras.
Esta clase lo hace:


Public Class clsSendMail
Public Shared Function SendEMail(ByVal strOrigen As String, ByVal strDestinatario As String, ByVal strAsunto As String, ByVal strMsg As String, ByVal usuario As String, ByVal Clave As String, ByVal smtp As String, ByVal Adjunto As String) As Boolean
Dim msg As New MailMessage()
msg.[To].Add(New MailAddress(strDestinatario))
msg.From = New MailAddress(strOrigen)
msg.Subject = strAsunto
msg.Body = strMsg

'Adjuntar fichero. No se puede ajuntar el fichero tal cual, pues se queda bloqueado.
Dim contentAsBytes As Byte() = Encoding.UTF8.GetBytes(Adjunto)
Dim memStream As System.IO.MemoryStream = New System.IO.MemoryStream(contentAsBytes)

Dim streamWriter As System.IO.StreamWriter = New System.IO.StreamWriter(memStream)
streamWriter.Flush()


memStream.Position = 0

Dim thisAttachment As Attachment = New Attachment(memStream, vbNull) ' "image/jpeg")
Dim F As Long
Dim FileNameAdjunto As String
F = InStrRev(Adjunto, "\")
If F = 0 Then
FileNameAdjunto = Adjunto
Else
FileNameAdjunto = Adjunto.Substring(F)
End If
thisAttachment.ContentDisposition.FileName = FileNameAdjunto

msg.Attachments.Add(thisAttachment)

'msg.Attachments.GetEnumerator()

Dim clienteSmtp As New SmtpClient(smtp)
clienteSmtp.Credentials = New NetworkCredential(usuario, Clave)

Try
clienteSmtp.Send(msg)

Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function

End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por Roberto (3 intervenciones) el 08/07/2011 19:15:00
'estaba MAL

'Dim contentAsBytes As Byte() = Encoding.UTF8.GetBytes(Adjunto) ' Encoding.UTF8.GetBytes(Adjunto)

Esto es lo correcto:
Dim contentAsBytes As Byte() = FileIO.FileSystem.ReadAllBytes(Adjunto)

sino lo que hacemos es generar un fichero con el texto del nombre del fichero, no de su contenido.

Un terrible pequeño fallo que producia este error el cual detallo para que los buscadores lo encuentren:

Error al abrir PDF generado sin cambiar el codigo indicado:

Adobe reader no pudo abrir 'nombre fichero' debido a que no es un tipo de archivo admitido o está dañado (por ejemplo, se envió como adjunto de correo eletrónico y no se descodifica correctamente).

8 JULIO DE 2011 (San fermin 2011)
Soy de los que confunden hallowen con navidad ( OCT(31) = DEC(25) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por JotaJota352 (1 intervención) el 09/02/2019 04:45:24
Saludos!, se que respondo algo tarde, pero forme un código que puede dar la solución a tu problema, aunque como digo un poco tarde pero espero que le sirva de utilidad a otras personas que han intentado dar solución con el problema y no lo han logrado. el problema se debe al bloqueo del documento producido por el attachment que capturaba el documento y no dejaba hacer nada.

El siguiente código lo realice en un modulo y luego lo llame a través de un botón en un form de esta manera "enviarCorreo(TextBox5.Text)" donde el textbox5 va el correo del destinatario. cualquier duda escribirme a mi correo "[email protected]"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'Primero se importan las librerias
 
Imports System.Net
Imports System.Net.Mail
Imports System.Text
 
' luego comienza el código en el modulo al que llame EMAIL
 
Module Email
 
 
    Private correos As New MailMessage
    Private envios As New SmtpClient
 
    Sub enviarCorreo(ByVal destinatario As String)
 
 
        Dim emisor As String
        Dim password As String
        Dim mensaje As String
        Dim asunto As String
 
        emisor = "Aqui va el correo desde el que se envia"
        password = "Contraseña del correo"
        mensaje = "acá el Mensaje"
        asunto = "acá el Asunto"
        Try
            correos.To.Clear()
            correos.Body = ""
            correos.Subject = ""
            correos.Body = mensaje
            correos.Subject = asunto
            correos.IsBodyHtml = True
            correos.To.Add(Trim(destinatario))
 
 
 
            correos.From = New MailAddress(emisor)
            envios.Credentials = New NetworkCredential(emisor, password)
 
            'Datos importantes no modificables para tener acceso a las cuentas
 
            envios.Host = "smtp.gmail.com"
            envios.Port = 587
            envios.EnableSsl = True
            Dim archivo As Net.Mail.Attachment = New Net.Mail.Attachment("ACÁ VA LA RUTA DEL DOCUMENTO A ADJUNTAR")
            correos.Attachments.Add(archivo)
 
            envios.Send(correos)
 
            archivo.Dispose()
 
            MsgBox("El mensaje fue enviado correctamente. ", MsgBoxStyle.Information, "Mensaje")
 
 
            correos.Attachments.Clear()
 
        Catch ex As Exception
            MsgBox(Err.Description)
            MessageBox.Show(ex.Message, "Mensajeria 1.0 vb.net ®", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
 
 
    End Sub
End Module
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por Fernando Martín (1 intervención) el 04/02/2020 13:59:52
Gran aporte JotaJota352! Me has salvado de una buena y funciona genial!

Muchas gracias.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El proceso no tiene acceso al archivo porque esta siendo utilizado por otro proceso vb.net

Publicado por Nelson (1 intervención) el 16/06/2023 19:19:21
Buenas tardes, muy agradecido JotaJota352.

Pasó un tiempo desde que publicaste esto, pero aún hoy sigue ayudando.

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar