Von anderem Prozess verwendet

  • VB.NET
  • .NET 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von KingTimon.

    Von anderem Prozess verwendet

    Hallo,

    für mein Projekt versuche ich ein "zuletzt verwendet" zu machen. Das ganze sieht so aus, dass ich in eine Textdatei immer 3 Namen von Lektionen speichere, welche in Linklabel eingelesen werden und so einen schnelleren Start ermöglichen. Nun gut, bei jedem Mal, wo ich eine Lektion öffne, führe ich einen Sub aus. Folgendes in dem Sub speichert die Namen der zuletzt geöffneten Lektionen:

    VB.NET-Quellcode

    1. '(...)
    2. Dim StringBuilder As New System.Text.StringBuilder
    3. StringBuilder.AppendLine(L.Name)
    4. StringBuilder.AppendLine(VtLinkLabel14.Text) 'Ich weiß, dass ich keine Variablen aus Controls verwenden soll, änder ich noch!
    5. StringBuilder.AppendLine(VtLinkLabel13.Text)
    6. IO.File.WriteAllText(IO.Path.Combine(Dir & "\VocTrainor\Verlauf.ini").ToString, StringBuilder.ToString)

    Mein Problem liegt nun bei:

    VB.NET-Quellcode

    1. IO.File.WriteAllText(IO.Path.Combine(Dir & "\VocTrainor\Verlauf.ini").ToString, StringBuilder.ToString)

    Fehlermeldung:

    Visual Studio 2010 Express schrieb:

    Der Prozess kann nicht auf die Datei "C:\Users\Thomas\Documents\Visual Studio 2010\Projects\VocTrainor\VocTrainor\bin\Debug\VocTrainor\Verlauf.ini" zugreifen, da sie von einem anderen Prozess verwendet wird.

    Geladen habe ich die Zuletzt verwendeten Lektionen mit:

    VB.NET-Quellcode

    1. If IO.File.Exists(Dir & "\VocTrainor\Lektionen.ini") Then
    2. Using SR As New IO.StreamReader(Dir & "\VocTrainor\Lektionen.ini")
    3. While Not SR.EndOfStream
    4. Dim L As New Lektion
    5. Dim T As String = SR.ReadLine
    6. L.Name = T.Split("|"c)(0)
    7. L.Beschreibung = T.Split("|"c)(1)
    8. L.Sprache = T.Split("|"c)(2)
    9. ListBox1.Items.Add(T.Split("|"c)(0))
    10. Liste.Add(L)
    11. End While
    12. End Using
    13. End If

    Hier verwende ich "Using", also sollte nachdem "End Using" die Datei wieder "losgelassen" werden, oder? Ich glaub also nicht dass dies daran liegt.
    Hat jemand eine, an was diese Fehlermeldung liegen könnte?
    Danke im Vorraus.

    MFG
    Using entfernt nur den StreamReader aus dem Arbeitsspeicher bzw. dessen Komponenten, schließen musst Du den also noch.
    Beim Schließen wird afaik auch gleich disposed, also kannste das weglassen.

    Zudem nutzt Du doch WPF? Dann ist das (imho) die falsche Herangehensweise einfach alles im Codebehind ohne MVVM und Bindings zu machen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Nein, das ist Windows-Forms.

    Das heißt, dass es nicht an dem auslesen der Datei liegt, dass ich keinen Zugriff mehr darauf bekomme, oder doch?
    An was kann es noch liegen?

    MFG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KingTimon“ ()

    KingTimon schrieb:

    An was kann es noch liegen?
    Probier mal dies:

    VB.NET-Quellcode

    1. Dim file = Dir() & "\VocTrainor\Lektionen.ini"
    2. If IO.File.Exists(file) Then
    3. For Each T In IO.File.ReadLines(file)
    4. Dim L As New Lektion
    5. Dim parts() = T.Split("|"c)
    6. L.Name = parts(0)
    7. L.Beschreibung = parts(1)
    8. L.Sprache = parts(2)
    9. ListBox1.Items.Add(L.Name)
    10. Liste.Add(L)
    11. Next
    12. End If

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Trade schrieb:

    Using entfernt nur den StreamReader aus dem Arbeitsspeicher bzw. dessen Komponenten, schließen musst Du den also noch.

    Das halte ich für groben Unfug. Beim Disposen wird automatisch der Stream geclosed.

    Rinecamo schrieb:

    Beim Disposen wird automatisch der Stream geclosed.
    Jou, so isses.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Man ich bin auch ein Trottel.... xD, da hab ich einfach mal den falschen Sub reingestellt... sry Leute.
    man ist mir das jetzt vielleicht peinlich.

    VB.NET-Quellcode

    1. Dim Zähler As Integer = 0
    2. If My.Computer.FileSystem.FileExists(Dir & "\VocTrainor\Verlauf.ini") Then
    3. Using SR As New IO.StreamReader(Dir & "\VocTrainor\Verlauf.ini")
    4. While Not SR.EndOfStream
    5. If Zähler = 0 Then
    6. VtLinkLabel14.Text = SR.ReadLine
    7. ElseIf Zähler = 1 Then
    8. VtLinkLabel13.Text = SR.ReadLine
    9. ElseIf Zähler = 2 Then
    10. VtLinkLabel12.Text = SR.ReadLine
    11. End If
    12. Zähler += 1
    13. End While
    14. SR.Close()
    15. End Using
    16. End If

    Das wäre der richtige Sub.

    So, danke @RodFromGermany, hab das ganze jetzt trotzdem auf deinem Prinzip gebaut, sprich:

    VB.NET-Quellcode

    1. Dim Zähler As Integer = 0
    2. Dim file = Dir & "\VocTrainor\Verlauf.ini"
    3. If IO.File.Exists(file) Then
    4. For Each T In IO.File.ReadLines(file)
    5. If Zähler = 0 Then
    6. VtLinkLabel14.Text = T
    7. ElseIf Zähler = 1 Then
    8. VtLinkLabel13.Text = T
    9. ElseIf Zähler = 2 Then
    10. VtLinkLabel12.Text = T
    11. End If
    12. Zähler += 1
    13. Next
    14. End If

    War super super super Hilfe! :)

    MFG und danke für die großartige Hilfe, trotz meines Fehlers.
    @RodFromGermany Ja, stimmt, da hatte ich etwas durcheinander gewürfelt. :>
    @KingTimon Ansonsten, wie Rod sagt, bei File.ReadLines steckt vmtl. auch nicht viel etwas anderes dahinter und ist ja auch leichter zu verwalten und sollte es lösen. ^^
    Edit: Damn, 2late.

    Und bzgl. der Anmerkung dann passt ja alles, dachte nur irgendwas von WPF-Remake gelesen zu haben. ^^

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade ja, hab ich grundsätzlich auch vor gehabt. Nur leider habe ich 0 Ahnung davon und komme momentan mit Windows-Forms sehr gut zurecht.

    Danke trotzdem für deinen Tipp!