2016-03-11 4 views
0

, когда я пишу в мой лог-файл иногда я получаю доступ для входа путь запрещен C: /app/log.logДоступ к пути входа отрицается случайно

Вот мой код:

Private filePath As String 
Private fileStream As FileStream 
Private streamWriter As StreamWriter 

Public Sub OpenFile() 
    Dim strPath As String 
    strPath = My.Application.Info.DirectoryPath + "\log.log" 
    If System.IO.File.Exists(strPath) Then 
     fileStream = New FileStream(strPath, FileMode.Append, FileAccess.Write) 
    Else 
     fileStream = New FileStream(strPath, FileMode.Create, FileAccess.Write) 
    End If 
    streamWriter = New StreamWriter(fileStream) 
End Sub 

Public Sub WriteLog(ByVal strComments As String) 
    OpenFile() 
    streamWriter.WriteLine(Date.Now.ToString & " " & strComments) 
    CloseFile() 
End Sub 

Public Sub CloseFile() 
    streamWriter.Close() 
    fileStream.Close() 
End Sub 

В любом случае, чтобы использовать разрешения администратора или устранить эту проблему? Иногда это происходит, и я не уверен, почему это происходит, но если я удалю файл log.log, приложение может снова записать в журнал. Очень странно.

+0

Если это работает * иногда *, это, вероятно, не проблема, а проблема «в использовании». Я удивлен, что у вас нет проблем с разрешениями. Приложения не должны записываться в корневой каталог диска C: \. Вместо этого записывайте файлы журналов в AppData. –

+0

Так как вы создаете новый поток файлов каждый раз, когда вы пишете на него, почему у вас также есть его как общедоступная переменная, которая никогда не удаляется? – Plutonix

ответ

0

Вы вызываете свою функцию WriteLog из нескольких потоков асинхронно, вы должны защитить эту функцию, например, с помощью мьютекса.

+0

Вы думаете, что это причина? Как мне это сделать? –