System.IO.StreamReader nie może czytać pliku .txt ponieważ jest on używany przez inny proces

0

Witam tak jak w temacie. Otóż zamierzam skończyć swój projekt w visual basic'u , ale nie moge sobie poradzić z tym (na zdjęciu)...
Nie mogłoby jakoś tego obejść? żeby jednocześnie zapisywało do pliku .txt i jednocześnie czytało z pliku txt do textbox'a ?

PS: Daje część kodu źródłowego:

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ''Skrypt do tworzenia loga''
        Dim skrypt As String
        skrypt = " > logi\wypakuj.txt"
        ''Koniec Skryptu''

        Shell("cmd.exe /k" + "wypakuj\wypakuj.exe" + " " + TextBox1.Text + skrypt)
        Shell("skrypt.bat")
        If TextBox1.Text = "" Then
            MsgBox("Podaj paczkę *.PKG")
            Return
        End If
        If TextBox2.Text = "" Then
            MsgBox("Podaj folder, gdzie wypakować pliki z paczki *.PKG")
            Return
        End If

        System.Threading.Thread.Sleep(250)
        Do
            Dim czytaj As New System.IO.StreamReader("logi\wypakuj.txt")
            TextBox6.Text = czytaj.ReadToEnd
        Loop
    End Sub
0

halo??

1

Zamiast StreamReader użyj FileStream tam możesz pokombinować z prawami dostępu do pliku. A swoją drogą to nie wiem czemu to ma służyć ale ta pętla wygląda mi ciekawe tak się zastanawiam po co w kółko tworzysz nowy StreamReader i czytasz cały plik do Edit kiedy w takiej pętli nawet nie zobaczysz odczytanego tekstu (po prostu nawet się nie odświeży).

0

ok... a jakiś kod do tego "FileStream-era"?

0

Hmmm nie wiem dokładnie ci chcesz zrobić ale może coś takiego:

        Dim file As New System.IO.FileStream("logi\wypakuj.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        Do
            Dim length As Integer = file.Length
            Dim buffer() As Byte = New Byte(length - 1) {}
            file.Read(buffer, 0, length)
            TextBox6.Text = System.Text.Encoding.ASCII.GetString(buffer)
            Application.DoEvents()
            file.Seek(0, SeekOrigin.Begin)
            System.Threading.Thread.Sleep(100)
        Loop

Kod odczytuje plik co 100ms plik może być modyfikowany przez inną aplikację (o ile ta nie żąda otwarcia pliku z prawami wyłączności) .

1 użytkowników online, w tym zalogowanych: 0, gości: 1