2013-11-22 3 views
0

데이터가 손상된 텍스트 파일을 삭제하려고합니다. 파일을 구문 분석하고 잘못된 문자를 찾으면 공간으로 바꿉니다. 내 문제는 공간이 나쁜 성격을 덮어 쓰지 않는다는 것이다. 대신이 공간은 10 번 줄 27 번 위치에 씁니다. 여기서 무슨 일이 벌어지고 있죠? 나는이 겉보기에 간단한 문제를 반나절 동안 붙들 렸습니다. 감사.텍스트 파일의 '잘못된 문자'를 VB.NET의 공백으로 대체하는 방법

 Sub replaceChars(fname As String) 
     Dim fs As New FileStream(fname, FileMode.Open, FileAccess.ReadWrite) 
     Dim r As New StreamReader(fs) 
     Dim w As New StreamWriter(fs) 
     Dim iChar As Integer = 0 

     Do Until r.Peek() = -1 
      iChar = r.Read() 
      If iChar < 32 Or iChar > 126 Then 
      If iChar = 13 Or iChar = 10 Then 'cr/lf, continue. 
       Continue Do 
      Else 'found a bad char. replace it. 
       w.Write(Chr(32)) 
       w.Flush() 
       fs.Flush() 
      End If 
      Else 
      Continue Do 
      End If 
     Loop 
     w.Close() 
     fs.Close() 
     End Sub 
+2

하여 FileStream 버퍼 기본적으로 4096 바이트를 사용한다. 첫 번째 쓰기는 4096 오프셋으로 만들어지며 원하는 곳이 아닌 위치에 있습니다. FileStream.Seek()를 텍스트 파일로 신뢰할 수 없게 만들 수 없습니다. 모든 것을 * 다른 * 파일, File.Replace()를 작성한 후에 작성하십시오. –

+0

감사합니다. 나는 행을 char 배열로 변환하고 배열의 값을 대체했다. char 배열을 다시 string으로 변환합니다. 당신이 제안한 것처럼 임시 파일을 사용하여 임시 파일을 실제 파일에 쓰고 복사했습니다. 다시 한 번 감사드립니다. – user3023401

답변

0

은 정말 내가 그 때문에 '불합리한'문제를 많이했다했기 때문에 당신이 독자와 writter에 대한 파일 스트림을 공유하는 생각처럼니까.

Idiposable 개체를 사용할 때 처리가 끝난 Warningies가 끝나면 'Using'문을 사용하고 유선 오류가 발생하지 않는다는 것을 알았습니다.

시도해보십시오. 어쩌면 도움이 될 수 있으며 항상 이렇게하는 것이 좋습니다.

Using Statement

+0

감사. 당신이 제안했듯이, 나는 독자와 작가의 파일 스트림을 분리했다. 나는 작가에게 using 문을 사용한다. 지금 일하고있어. – user3023401

관련 문제