vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ASP.NET, WebServices u. Remoting
Streamwriter sperrt Datei ?!? 
Autor: Jojo
Datum: 18.03.13 12:55

Hallo,

ich habe folgendes Problem:
Ich schreibe mit dem Streamwriter eine Datei. Wenn ich aber ein paar Minuten später versuche die Datei zu überschreiben, bekomme ich die Meldung, dass die Datei noch geöffnet sein. Ich mache die aber eigentlich zu

Was ist falsch an meinem Code?

 
            Using sw As IO.StreamWriter = New IO.StreamWriter(Dateiname, False, _
              System.Text.Encoding.Default)
                SDR = New SqlCommand(SQL, sdc).ExecuteReader
                For T = 0 To SDR.FieldCount - 1
                    sw.Write(SDR.GetName(T) & ";")
                Next T
                sw.WriteLine()
 
                Do While SDR.Read
                    For T = 0 To SDR.FieldCount - 1
                        sw.Write(Replace(Replace(SDR(T).ToString, ";", ","), _
                          vbCrLf, " ") & ";")
                    Next T
                    sw.WriteLine()
                Loop
                SDR.Close()
                sw.Close()
                sw.Dispose()
            End Using
Wenn ich dann versuche eine neue Datei hoch zu laden kommt der Fehler:

 
                If System.IO.Path.GetFileName( _
                  FileUpload1.PostedFile.FileName).EndsWith(".csv", _
                  StringComparison.CurrentCultureIgnoreCase) = True Then
                    'File upload
                    Try
                        If System.IO.File.Exists(Dateiname) = True Then _
                          System.IO.File.Delete(Dateiname)
                        FileUpload1.PostedFile.SaveAs(Dateiname)
                        Meldung.InnerHtml = tools.Sprache("Die Datei ### wurde" & _
                          "erfolgreich übertragen.").Replace("###", _
                          System.IO.Path.GetFileName( _
                          FileUpload1.PostedFile.FileName)) & "<br /><br />"
                    Catch ex As Exception
                        Meldung.InnerHtml = tools.Sprache("Fehler bei speichern" & _
                          "der Datei") & " " & Dateiname & "<br />" & _
                          ex.Message & "<br /><br />"
                        Exit Sub
                    End Try
'...
Der Fehler kommt dann:
Fehler bei speichern der Datei C:\inetpub\wwwroot\...\Shop_Lieferadressen.csv
Der Prozess kann nicht auf die Datei "C:\inetpub\wwwroot\...\Shop_Lieferadressen.csv" zugreifen, da sie von einem anderen Prozess verwendet wird.

Wer hat eine Idee?

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: ModeratorDaveS (Moderator)
Datum: 18.03.13 14:06

Ist das eine Webseite?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: Jojo
Datum: 18.03.13 14:40

Ja, ist eine Webseite.

Zuerst kann sich der Benutzer seine Daten als csv Datei erstellen lassen. Die bekommt er dann per Email gesendet. Die kann er ändern und wieder hochladen.

Der Fehler entsteht dann, wenn die hochgeladenen Datei unter dem gleichen Dateinamen gespeichert werden soll wie die Datei, die er angefordert hat. Da schlägt dann das löschen fehl ...

Joachim

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: ModeratorDaveS (Moderator)
Datum: 18.03.13 14:57

Dann gehört der Beitrag eigentlich unter Asp.Net/WebServices.

Ich schätze der Fehler liegt irgendwo anders, lediglich wird die Datei nochmal geöffnet um heruntergeladen zu werden, oder?

Übrigens, .Close() und .Dispose() bewirken das Gleiche bei StreamWriter, und beide sind mit Using überflüssig. Besser wäre es zusätzlich SDR in Using-Klausel aufzunehmen, damit erübrigt sich auch .Close() für SDR, was auch sicherer ist weil dann mit Try/Catch geschützt.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: Jojo
Datum: 19.03.13 12:30

Hallo Dave,

du hast recht. Die Funktion mit dem Streamwrite ist nicht das Problem. Ich habe jetzt festgestellt, dass meine SendMail Funktion die Datei sperrt ...

    Public Shared Function Sendmail(ByVal EmpfängerMail As String, ByVal _
      Betreff As String, ByVal Mail_Text As String, ByVal Attachment As String, _
      ByVal AbsenderMail As String, ByVal AbsenderName As String, Optional _
      ByVal CC As String = "") As String
 
        ' SMTP-Server
        Dim oSMTP As New SmtpClient
        Dim oMail As New MailMessage(AbsenderMail, EmpfängerMail)
        Dim SM1 As Integer, SMFeld() As String
 
        With oSMTP
            ' Mailserver
            .Host = "192.168.190.100"
            .Port = 25
            .Timeout = 10000
 
            ' Erweiterte Mail-Einstellungen
            .UseDefaultCredentials = False
            .DeliveryMethod = SmtpDeliveryMethod.Network
 
        End With
 
        With oMail
            ' Betreff
            .Subject = Betreff
            .IsBodyHtml = True
            .Body = Mail_Text
 
            ' ggf. Kopie-Empfänger hinzufügen
            If CC <> "" Then
                SMFeld = Split(CC, ";")
                For SM1 = 0 To UBound(SMFeld)
                    .CC.Add(New MailAddress(SMFeld(SM1)))
                Next SM1
            End If
 
            ' Anlagen hinzufügen
            If Attachment <> "" Then
                SMFeld = Split(Attachment, ";")
                For SM1 = 0 To UBound(SMFeld)
                    .Attachments.Add(New Attachment(SMFeld(SM1)))
                Next SM1
            End If
            ' Priorität einstellen
            .Priority = MailPriority.Normal
        End With
 
        Try
 
            ' Nachricht senden
            oSMTP.Send(oMail)
            Sendmail = ""
        Catch oEx As Exception
            ' zweiten SMTP Server probierne ...
        End Try
 
    End Function
Ich bekomme das Object oSMTP nicht zu. Ich habe das mit oSMTP.Dispose() versucht - aber das geht nicht.

Hast Du eine Idee?

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: ModeratorDaveS (Moderator)
Datum: 19.03.13 17:37

Wie üblich .Dispose() (also Using oSMTP As ... oMail As ....) sollte alle Resourcen freigeben, auch die Unterobjekte wie MailMessage, Attachment, wenn es so nicht klappt auch die Attachmants explizit disposen, sollte aber nicht notwendig sein. Was bedeutet hier "geht nicht"? Ist wenig aussagend.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: Jojo
Datum: 20.03.13 09:12

Genau das habe ich schon versucht ...

        Using oSMTP As New SmtpClient
            Dim oMail As New MailMessage(AbsenderMail, EmpfängerMail)
 
            With oSMTP
                .Host = "192.168.190.100"
                .Port = 25
            End With
 
            With oMail
                .Subject = Betreff
                .Body = Mail_Text
                .Attachments.Add(New Attachment(SMFeld(SM1)))
            End With
 
            Try
                oSMTP.Send(oMail)
            Catch oEx As Exception
            End Try
        End Using
VB2012 gibt mir keine Fehlermeldung über einen falschen Syntax. Die ausführung wird aber ohne Fehler abgebrochen. Kopiere ich die Seite auf den Webserver bekomme ich diese Fehlermedung mit der ich nichts anfangen kann:

Compilerfehlermeldung: BC36010: Ein Using-Operand vom Typ "System.Net.Mail.SmtpClient" muss System.IDisposable implementieren.
Zeile 154: Using oSMTP As New SmtpClient


Wenn ich danach Google kommt ein Hinweis auf einen alten Bug im Framework

Das mit dem Dispose() ist auch Komisch:
        oMail.Dispose()
        oSMTP.Dispose()
In der Validierung schlägt er mit dispose für beide Objecte vor. Auch hier bricht die Ausführung wieder ohne Fehler ab. Der Webserver gibt:

Compilerfehlermeldung: BC30456: "Dispose" ist kein Member von "System.Net.Mail.SmtpClient".
Zeile 241: oSMTP.Dispose()


zurück ...

Das Problem ist der SmtpClient (oSMTP). Ich habe das Object jetzt mal ganz in Ruhe gelassen und nur das MailMessage-Object (oMail) mit dispose() zerstört...

Ist zwar nicht so die feine Art - aber damit funktioniert es und meine Datei ist nicht mehr gesperrt

Danke für die creative MitDenkHilfe

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamwriter sperrt Datei ?!? 
Autor: ModeratorDaveS (Moderator)
Datum: 20.03.13 09:49

Vermutlich läuft der Server mit FW 3.5 oder früher. Bis 4.0 wurde IDisposable nicht implementiert. Das war anscheinend ein "Breaking Change" in FW 4.0 und schon etwas ungewöhnlich. Aber in der Tat muss man schon oMail freigeben und nicht (bis 4.0) oSmtp, mein Fehler.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel