vba open for binary...펌
비베 파일binary 모드 사용법
- 비공개
- 2010.10.20 18:53
- 답변
- 1
- 조회
- 101
비베 6.0환경인데요,
아래 소스로 이진모드로 파일을 열려고 하는데
자꾸 멈춰버려서요,,
Public F_No As Long
Public F_C As String
Public F_Con As String
Public F_Name As String
Public tLen As Double
Public k As Double
Private Sub Command1_Click()
CommonDialog1.ShowOpen
F_Name = CommonDialog1.FileName
F_No = FreeFile
Open F_Name For Binary As #F_No
Do Until EOF(F_No) '아무래도 이부분에서 무한루프에 빠져서 그렇겠죠?,어떻게 수정하죠?ㅜ
Get #F_No, , F_C
F_Con = F_Con + F_C + vbCrLf
Loop
End Sub
심각한 초보라서, 좀 엉뚱한 소스일수도 있는데,
지적 부탁드립니다.
근데, 파일 종류 가리지않고, 읽고 쓸려면 이진모드로 해야하는거 맞죠잉?
근데, 또 F_Con에 담아도 textbox에 깨진글자라도 표현 못해주나요?
질문자 채택된 경우, 추가 답변 등록이 불가합니다.
질문자 인사
정말 친절한 답변 감사드려요~ 와 감사합니다. 간단한건줄 알고 내공도 적게 올렸는데 약간 심오?하네요, 정 말감사해요 도움이 많이 될것 같아요.
바이너리 데이타를 제대로 읽으려면 String이 아니라. Byte로 읽어야 합니다.
이렇게 Byte로 읽은 데이타를 TextBox에 뿌려주기 위해서 String형으로 바꿀 수는 있지만.. 역변환은 되지 않습니다.
즉.. String형으로 파일을 읽어서 TextBox에 넣었다가.. TextBox의 내용을 저장한다면 원래의 파일과 다른 내용이 저장됩니다.
이것은 아스크코드 값 0이나.. 삑소리를 내는 7번, 백스페이스를 의미하는 8번과 같은 데이타는 String형에 담을 수 없기 때문입니다.
참고로.. 위의 소스를 제대로 수정한다면 다음과 같이 할 수 있습니다.
--------------------------------
Private Sub Command1_Click()
CommonDialog1.ShowOpen
F_Name = CommonDialog1.FileName
F_No = FreeFile
Dim arrBytes() As Byte
ReDim arrBytes(FileLen(F_Name))
Open F_Name For Binary As #F_No
If Not EOF(F_No) Then
Get #F_No, , arrBytes
F_Con = StrConv(arrBytes, vbUnicode)
End If
Close #F_No
End Sub
--------------------------------
위의 예제는 arrBytes라는 Byte 배열에 파일의 내용을 모두 담고.. strConv라는 함수를 이용하여 Byte배열을 string형을 바꾸어서 F_Con에 담습니다.
도움 되시길 바라며 즐거운 하루 되세요.