2017-10-08 7 views
-1

이것은 실제 머리를 긁는 사람입니다. 모든 문서에 따르면 file.readAllLines은 완료 후 읽는 파일을 닫아야합니다. 그러나 내 응용 프로그램에서 파일에 쓰려고하면 "프로세스가 다른 프로세스에서 사용 중이므로 파일에 액세스 할 수 없습니다"라는 IO 예외가 발생합니다. 그리고 이것은 정말로 간단해야합니다. 문제의 파일은 두 번만 참조됩니다. 첫 번째 시작시 앱으로 읽은 다음 한 번 덮어 쓰면 다시 한 번 참조됩니다. 여기에 코드입니다 : 첫째VB 2012 - StreamReader가 닫히지 않음

파일을 여는 코드 (파일 경로 사용되는 c:\Test\cfg.fcs) :

Public Function ReadALine(ByVal File_Path As String, ByVal TotalLine As Integer, ByVal Line2Read As Integer) As String 
    Dim Buffer As Array 
    Dim Line As String 
    If TotalLine <= Line2Read Then 
     Return "No Such Line" 
    End If 
    Buffer = File.ReadAllLines(File_Path) 
    Line = Buffer(Line2Read) 

    Return Line 
End Function 

그것은 완벽하게 작동하고, 오른쪽 제대로 닫혀 파일을 떠나야한다? 하지만 나중에 다른 모듈에서 다음을 실행할 때 :

파일이 아직 사용 중임을 나타내는 예외가 발생합니다. 그것들은 파일 전체가 언급 된 두 번뿐입니다.

+0

첫 번째 메서드를 호출하지 않고 _ 마지막 두 줄을 포함하는 코드 _2 이상을 _ 호출하면 어떻게됩니까? – Steve

+0

OpenTextFileWriter에서 연 파일 스트림을 닫았습니까? –

답변

0

이 문제를 해결하는 다른 모든 사람들을위한 솔루션은 간단했지만 여전히 직관력이 떨어졌습니다. 문제는 명령의 순서에 불과했습니다. 나는 그것을 고정시킨 어떤 이유 때문에 file.writeline을 suband의 맨 아래로 옮겼다. 이상

+1

다음은 타이밍 문제입니다. 대부분 [귀하가 알고 있지 않은 프로그램의 다른 부분] (https://stackoverflow.com/a/31966611/11683) 또는 예 : [바이러스 백신] (https://stackoverflow.com/questions/31950107/file-readalllines-quickly-followed-by-file-writealllines-causes-exception-du#comment51809843_31950107). – GSerg