데이터가 손상된 텍스트 파일을 삭제하려고합니다. 파일을 구문 분석하고 잘못된 문자를 찾으면 공간으로 바꿉니다. 내 문제는 공간이 나쁜 성격을 덮어 쓰지 않는다는 것이다. 대신이 공간은 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
하여 FileStream 버퍼 기본적으로 4096 바이트를 사용한다. 첫 번째 쓰기는 4096 오프셋으로 만들어지며 원하는 곳이 아닌 위치에 있습니다. FileStream.Seek()를 텍스트 파일로 신뢰할 수 없게 만들 수 없습니다. 모든 것을 * 다른 * 파일, File.Replace()를 작성한 후에 작성하십시오. –
감사합니다. 나는 행을 char 배열로 변환하고 배열의 값을 대체했다. char 배열을 다시 string으로 변환합니다. 당신이 제안한 것처럼 임시 파일을 사용하여 임시 파일을 실제 파일에 쓰고 복사했습니다. 다시 한 번 감사드립니다. – user3023401