본문 바로가기

Programming/C#

C# 파일 입출력 - Stream 클래스 II(BinaryWriter, BinaryReader)

반응형

이전 글에서 Stream 클래스와 Using에 대해 알아보았으며 StreamWriter에 대해 알아보았습니다. 이번에는 StreamReader와 이진 파일 읽기와 쓰기의 BinaryWriter 및 BinaryReader에 대해 알아보겠습니다.

 

C# 파일 입출력 - Stream 클래스

 

C# 파일 입출력 - Stream 클래스

 파일을 읽고 쓰기를 할 때 하드디스크의 정보를 메모리로 이동시켜 파일을 읽어 들이고 또는 파일 쓰기를 할 때는 메모리에 있는 내용을 하드디스크로 이동시킵니다. 이때 이 이동하는 경로를

mr-johndoe.tistory.com

 

 

 

 

1. StreamReader

  StreamReader는 텍스트 형식의 파일을 불러올 때 사용하는 클래스입니다. 사용 방법은 StreamWriter와 유사하며 다음과 같습니다.

 

   StreamReader 이름 = new StreamReader(파일명, 형식)

 

형식은 이전 글에서 확인한 FileStream의 FileMode와 동일하게 사용합니다.

 

2. BinaryWriter와 BinaryReader

  StreamWriter와 StreamReader는 텍스트 형식의 파일을 쓰거나 읽을 때 사용합니다. 텍스트 형식으로 파일을 저장하면 파일 내용을 쉽게 확인할 수 있어서 보안상 취약한 점이 있으며, 데이터를 저장하거나 읽어올 때 반드시 Byte 형식으로 변환해야 하는 번거로움이 있습니다.

 

BinaryWriter는 파일을 저장할 때 이진 파일 형식으로 저장을 할 수 있습니다. 사용 방법은 앞에서 확인한 StreamWriter와 StreamReader 사용 방법과 유사합니다.

 

  BinaryWriter 이름 = new BinaryWriter(파일명, 형식)

 

  BinaryReader 이름 = new BinaryReader(파일명, 형식)

 

3. FileStream 함께 사용

  StreamWriter / StreamReader와 BinaryWriter / BinaryReader는 단독으로 사용할 수 있으나 FileStream과 함께 사용할 수도 있습니다.

 

FileStream과 함께 사용하게 되면 파일을 여는 형식(FileAccess)을 지정할 수 있으며 형식에 다음과 같이 지정할 수 있습니다.

 

FileAccess 설명
Read 읽기 전용 파일
ReadWrite 읽기 및 쓰기 가능한 파일
Write 쓰기 전용 파일

 

 

 

 

4. 예제로 확인

  StreamReader 사용 방법을 예제를 통해 확인해 보겠습니다. Visual Studio를 실행하고 C# 콘솔 애플리케이션을 실행합니다.

 

이전 글에서 StreamWriter로 작성한 텍스트 파일(test.txt)을 읽어오는 예제를 아래와 같이 작성합니다.

 

   using System;

   using System.IO;

 

   namespace FRead

   {

     class Program

     {

       static void Main(string[] args)

       {

          using(StreamReader sr = new StreamReader(@"c:\test.txt"))

          {

             float value = float.Parse(sr.ReadLine());

             string str = sr.ReadLine();

             Console.WriteLine("{0} {1}", value, str);

          }

       }

     }

   }

 

화면에 3.14 Hello World!가 출력되는 것을 보실 수 있습니다. 위의 예제에서 StreamReader를 using과 함께 사용하였으므로 sr.close()를 생략하여도 무방합니다. using 없이 StreamReader를 사용한 경우에는 반드시 마지막에 sr.close()를 입력하여 파일을 닫아주어야 합니다.

 

 

 

 

BinaryWriter에 대한 예제를 다음과 같이 작성합니다.

 

   using System;

   using System.IO;

 

   namespace Ex_BinaryWriter

   {

     class Program

     {

       static void Main(string[] args)

       {

          float value = 3.14f;

          string str = "Hello World!";

          using (BinaryWriter bw = new BinaryWriter(new FileStream(@"c:\\test.txt", FileMode.Create)))

         {

            bw.Write(value);

            bw.Write(str);

         }

       }

     }

   }

 

이번에는 FileStream과 BinaryWriter와 함께 쓰면서 파일을 새로 만드는 모드로 설정하였습니다.

위의 코드를 실행하시면 test.txt라는 파일이 C드라이브에 생성되는데 파일을 열어보시면 앞에서 StreamWriter로 생성한 파일과는 달리 내용을 완벽히 알아보실 수 없을 것입니다.

 

반응형