Dim fs, s1, s2 As FileStream Dim sr As StreamReader Dim sw As StreamWriter Dim br As BinaryReader Dim bw As BinaryWriter Dim ms As MemoryStream Const FILE_NAME = "c:\textFile.txt" Const BAK_FILE_NAME = "c:\textFile_bak.txt" Const FILE_NAME_IMAGE = "c:\iMac.jpg" Const FILE_NAME_BIN = "c:\bin.jpg" Dim bytes(10) As Byte지금까지 언급한 클래스들은 모두 System.IO 네임 스페이스에 있으므로 이 네임 스페이스를 임포트한다.
Imports System.IOFileStream과 MemoryStream 외에 바이너리 데이터의 읽기/쓰기를 위해 BinaryReader와 BinaryWriter 클래스를 사용하며, 텍스트 데이터의 읽기/쓰기에는 StreamReader와 StreamWriter 클래스를 사용할 것이다.
참고 도서 VB.NET Core Classes in a Nutshell |
"---Copy and Delete the file If File.Exists(FILE_NAME) Then File.Copy(FILE_NAME, BAK_FILE_NAME, True) File.Delete(FILE_NAME) End If파일 생성
fs = File.Create(FILE_NAME_BIN) fs.Close() sw = File.CreateText(FILE_NAME) sw.Close() fs = File.Open(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read) fs.Close()FileStream 클래스를 사용하여 바이너리 데이터 쓰기
"---create a file and write some bytes to it fs = New FileStream(FILE_NAME, FileMode.CreateNew, FileAccess.Write) bytes(0) = 72 "H" bytes(1) = 101 "e" bytes(2) = 108 "l" bytes(3) = 108 "l" bytes(4) = 111 "o" bytes(5) = 13 "CR" bytes(6) = 87 "W" bytes(7) = 111 "o" bytes(8) = 114 "r" bytes(9) = 108 "l" bytes(10) = 100 "d" fs.Write(bytes, 0, bytes.Length) fs.Close()StreamWriter 클래스를 사용하여 텍스트 쓰기
"---Using a streamWriter to write to a file sw = New StreamWriter(FILE_NAME, True, System.Text.Encoding.ASCII) sw.WriteLine("Welcome to VB.NET") sw.Close()FileStream 클래스를 사용하여 바이너리 데이터 읽기
"---open a file and read the byte(s) out fs = New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read) fs.Read(bytes, 0, bytes.Length) Dim i As Short For i = 0 To bytes.Length - 1 Console.Write(Chr(bytes(i))) Next찾기(Seeking)
"---seeking fs.Seek(11, SeekOrigin.Current) fs.Read(bytes, 0, 6) For i = 0 To 5 Console.Write(Chr(bytes(i))) Next fs.Close()※ 역자주: Read 함수들은 데이터를 읽어온 다음에 현재 위치를 다음 위치로 이동시키지만 Seek 함수들은 데이터를 읽어오기만 하며 위치를 이동시키지 않는다. 여기에 소개된 예제처럼 파일 내에서 위치를 이동하기 위해 Seek를 사용하기도 한다.
"---open a file and read line by line using a streamreader sr = New StreamReader(FILE_NAME) Dim line As String = sr.ReadLine() While Not line Is Nothing Console.Write(line) line = sr.ReadLine() End While sr.Close()BinaryReader와 BinaryWriter 클래스를 사용하여 바이너리 데이터 읽고 쓰기
"---read from and write to a binary file s1 = New FileStream(FILE_NAME_IMAGE, FileMode.Open, FileAccess.Read) s2 = New FileStream("c:\iMac_copy.jpg", FileMode.CreateNew, FileAccess.Write) br = New BinaryReader(s1) bw = New BinaryWriter(s2) Dim byteRead As Byte Dim j As Integer For j = 0 To br.BaseStream.Length() - 1 byteRead = br.ReadByte bw.Write(byteRead) Next br.Close() bw.Close()MemoryStream 클래스를 사용하여 바이너리 데이터 쓰기
"--read from a binary stream and write into a memory stream s1 = New FileStream(FILE_NAME_IMAGE, FileMode.Open, FileAccess.Read) ms = New MemoryStream(s1.Length) br = New BinaryReader(s1) Dim bytesRead As Byte() = br.ReadBytes(s1.Length) ms.Write(bytesRead, 0, s1.Length) PictureBox1.Image = New Bitmap(ms)나머지 유용한 함수들
Public Function stringcharToByteArray(ByVal str As String) As Byte() "e.g. "abcdefg" to {a,b,c,d,e,f,g} Dim s As Char() s = str.ToCharArray Dim b(s.Length - 1) As Byte Dim i As Integer For i = 0 To s.Length - 1 b(i) = Convert.ToByte(s(i)) Next Return b End Function Public Function stringToByteArray(ByVal str As String) As Byte() " e.g. "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16" to "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16} Dim s As String() s = str.Split(" ") Dim b(s.Length - 1) As Byte Dim i As Integer For i = 0 To s.Length - 1 b(i) = Convert.ToByte(s(i)) Next Return b End Function Public Function byteArrayToString(ByVal b() As Byte) As String Dim i As Integer Dim s As New System.Text.StringBuilder() For i = 0 To b.Length - 1 Console.WriteLine(b(i)) If i <> b.Length - 1 Then s.Append(b(i) & " ") Else s.Append(b(i)) End If Next Return s.ToString End Function※ 역자주: 위에 소개한 유틸리티 함수들은 닷넷 프레임워크의 System.Text 네임스페이스의 Encoding.GetBytes()와 Encoding.GetString()으로 이미 구현되어 있다.
이전 글 : 자바 스윙: 메뉴와 툴바 - 제 7편
다음 글 : 초보자가 리눅스 전문 개발자가 되는 그림책
최신 콘텐츠