Avatar billede king_toga Nybegynder
21. oktober 2004 - 19:34 Der er 7 kommentarer og
1 løsning

Jeg kan ikke få lov til at slette en fil jeg lige har læst fra ?

Hej Eksperter!

Jeg har lidt problemer med at slette en fil jeg lige har læst fra. Jeg har koden her !

Main klassen:

Public Sub closeMain()
        'fil med opdateringer til database
        Dim file As String = Application.StartupPath() _
                & "/Udgaaende Opdateringer/Opdateringer.kup"

        'undersøg om der er opdateringer der skal sendes
        Dim updates As Boolean
        updates = ft.checkForUpdates()

        'OBS følgende skal hentes fra konfigurationsfil
        Dim smtpServer As String = "mail.k64.dk"
        Dim sender As String = "Mortensen@henrikm.dk"
        Dim reciever As String = "Mortensen@henrikm.dk"

        'mailen er ikke sendt endnu
        Dim sent As Boolean = False

        If updates Then
            If MsgBox("Vil du overføre opdateringer ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then


                Dim mail As New MailSender(smtpServer, sender, reciever, ft.makeAttachment(file, Me.idGenerator.generateId))

                Me.Cursor = System.Windows.Forms.Cursors.WaitCursor

                sent = mail.send() 'nu er den sendt eller ikke sendt

                Me.Cursor = System.Windows.Forms.Cursors.Default
            End If
        End If

        'hvis mailen er sendt, så slet filen der blev lavet attachment af
        If sent Then
            Try

                System.IO.File.Delete(file) '

            Catch ex As Exception
                MsgBox("fil ikke slettet" & ex.ToString)
            End Try

        End If

        Me.Close()

        Me.Dispose()

       
    End Sub

Og her er klassen der åbner, læser og lukker filen

Public Function makeAttachment(ByVal file As String, ByVal id As String) As String

        Dim attach As String

        Try

            Dim temp As New ArrayList

            temp.Add(id)

            'opdateringsfil
            Dim reader As New IO.StreamReader(file)

            'placering af fil som skal bruges som attachment
            Dim writer As New IO.StreamWriter(Application.StartupPath() & "/Udgaaende Opdateringer/opdateringspakke.kup", True)

            Try
                ' hent første linie fra opdateringsfil
                Dim lineRead As String = reader.ReadLine()

                ' hent resten af linierene en efter en
                While (Not lineRead Is Nothing)
                    temp.Add(decrypt(lineRead))
                    lineRead = reader.ReadLine()
                End While

                'fylder attachmentfil med indholdet fra temp

                Dim i As Integer
                For i = 0 To temp.Count - 1
                    writer.WriteLine(temp(i))
                    Debug.WriteLine(temp(i))
                Next

                'lukker og slukkker forbindelsen til begge filer

                writer.Flush()
                reader.Close()
                writer.Close()
                writer = Nothing
                reader = Nothing

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally



            End Try

            attach = Application.StartupPath() & "/Udgaaende Opdateringer/opdateringspakke.kup"

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        Return attach

    End Function


Jeg får beskeden: the process cannot access file because file allready in use by another process... eller noget i den stil.

Hvad dælen er der galt her ?

~henrik mortensen
Avatar billede vigilante Nybegynder
21. oktober 2004 - 19:49 #1
Du skal lukke filen inden du kan slette den
Avatar billede king_toga Nybegynder
21. oktober 2004 - 20:54 #2
Hvordan gør man det ?
Avatar billede vigilante Nybegynder
21. oktober 2004 - 21:03 #3
Øh har lige siddet og leget med din kode og der har jeg altså ingen problemer med at slette filen.

Det eneste jeg har måttet kommenterer ud er der hvor du sender mailen, så hvis du satte du lukker dit mail objekt inden kunne jeg forestille mig at det også ville virke hos dig.

Ellers spørg igen
Avatar billede vigilante Nybegynder
21. oktober 2004 - 21:04 #4
Altså mailsender objektet
Avatar billede king_toga Nybegynder
21. oktober 2004 - 21:22 #5
hmm - jeg kan ikke lukke mit mail-objekt med dispose... ?

Her er koden

Imports System.Web.Mail

Public Class MailSender
    Private outgoingServer As String
    Private sender As String
    Private recipient As String
    Private attFile As String

    Public Sub New(ByVal outgoingServer As String, ByVal sender As String, ByVal recipient As String, ByVal attFile As String)
        Me.outgoingServer = outgoingServer
        Me.sender = sender
        Me.recipient = recipient
        Me.attFile = attFile

    End Sub

    Public Function send() As Boolean
        Dim sent As Boolean = False

        Try
            Dim mail As New MailMessage
            With mail
                .From = Trim(sender)
                .To = Trim(recipient)
                .Subject = Trim("Komsys databaseopdatering")
                .Body = Trim("Dette er en opdatering til Komsysdatabasen")
                Dim strFile As String

                .Attachments.Add(New MailAttachment(attFile))
            End With

            SmtpMail.SmtpServer = Me.outgoingServer

            SmtpMail.Send(mail)
            sent = True

            MsgBox("Opdatering sendt")

        Catch err As Exception
            MsgBox("Opdatering ikke sendt " + err.Message + vbCrLf)

        Finally
            System.IO.File.Delete(attFile)
        End Try

        Return sent

    End Function

End Class
Avatar billede king_toga Nybegynder
21. oktober 2004 - 21:53 #6
Høp!

Det var slet ikke min mailer der var problemet. Havde glemt at lukke en read et andet sted.

Tak for hjælpen ellers :)
Avatar billede vigilante Nybegynder
21. oktober 2004 - 22:07 #7
ja så gik der tid med det
Avatar billede king_toga Nybegynder
25. januar 2005 - 20:39 #8
luk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester