C#

[C# 기초공부] 파일입출력(1): 파일스트림FileStream/using/ StreamWriter, StreamReader

zoozoo2 2023. 1. 8. 03:01

🐣 목차

  • 스트림(Stream)
  • 직렬화(Serialize)
  • 정리

 

01. 파일스트림(file stream)

🟦 스트림 개요

■ 스트림(stream)이란?

파일, 네트워크 등에서 데이터를 바이트 단위로 읽고 쓰는 클래스

 

■ Stream class 는 상위 기본 클래스임

- 상속클래스들 

FileStream, MemoryStream, NetworkStream, SqlFileStream등

 

using System.IO 선언

 

🟦파일 스트림 FileStream

■ FileStream?

파일입출력을 다루는 기본 클래스

 

System.Object

+ System.MarshalByRefObject

    + System.IO.Stream

        + System.IO.FileStream

 

 

  byte[] 배열로 데이터를 읽거나 저장함 → 형변환이 요구됨

(모든 데이터의 흐름은 바이트구나! 그런 바이트를 순차적으로 읽어내거나 저장하기 위해서 배열형태를 사용하는구나! 

파일 입출력의 데이터 기본 단위는바이트!

C#에서는 유니코드를 사용하기 때문에 전부 2byte)

 

■ StreamWriter/StreamReader (텍스트들을 읽고 저장하는 역할)

+ BinaryWriter/BinaryReader(이진파일을 읽고 저장하는 역할, 임의의 형태)와 사용

 

■ 파일 정보 설정에 사용 

public FileStream (

          string path, //경로

          FileMode mode,

          FileAccess access

)

 

■ FileMode 열거형

Append, Create, CreateNew Open, OpenOrCreate, Truncate

■ FileAcccess 열거형

Read, ReadWrite, Write

 

(FileStream에서 객체 생성할 때 FileMode와 FileAcccess 셋팅하고, 그걸 StreamWriter/StreamReader  또는 BinaryWriter/BinaryReader에 넘기는 것)

 

🟦 텍스트 파일처리

■ StreamWriter, StreamReader

■ 텍스트 파일의 특징

- 기본단위 : 1바이트

- 아스키코드 기반

아스키코드를 유니코드로 인코딩 (C#에서는 유.니.코.드)

 

🟦 StreamWriter

■ 역할: 파일쓰기

■ 상속 계층 구조

System.Object

     +System.MarshalByRefObject

          +System.IO.TextWriter

             + System.IO.StreamWriter

 

■ public class StreamWriter : TextWriter

객체 생성과 해제

static void Main(string[] args)
        {
            FileStream fs = new FileStream("test.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

             ...
            sw.Close();
        }

 

using 문 : 호출한 객체의 실행이 끝난 후 자동 close 호출

FileStream fs = new FileStream("test.txt", FileMode.Create);

using (StreamWriter sw = new StreamWriter(fs)
            {
                //파일 입출력 처리
            }

 

static void Main(string[] args)
        {
            int value = 12;
            float value2 = 3.14f;
            string str1 = "향기를 쫒아가라!";
            FileStream fs = new FileStream("test.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(value);
            sw.WriteLine(value2);
            sw.WriteLine(str1);
            sw.Close();
        }

위의 코드를 using 구문을 이용해서 쓰기

static void Main(string[] args)
        {
            int value = 12;
            float value2 = 3.14f;
            string str1 = "향기를 쫒아가라!";
         

            using (StreamWriter sw = new StreamWriter(new FileStream("test1.txt", FileMode.Create)))
            {
                sw.WriteLine(value);
                sw.WriteLine(value2);
                sw.WriteLine(str1);

            }
        }

 

 

  streamWrite 이용해서 코드 보기

 static void Main(string[] args)
        {
            int value = 12;
            float value2 = 3.14f;
            string str1 = "향기를 쫒아가라!";
            StreamWriter sw = new StreamWriter("test.txt");
            sw.WriteLine(value);
            sw.WriteLine(value2);
            sw.WriteLine(str1);
            sw.Close();

           
        }

🟦StreamReader

■ 역할: 파일 읽기

■ 상속 계층 구조

 System.Object

   + System.MarshalByRefObject

       + System.IO.TextReader

           + System.IO.StreamReader

■ public class StreamReader : TextReader

 

■ 읽기 메서드: Read(), ReadLine(), string ReadLine()

 

■ FileStream과 StreamReader를 같이 사용하는 예시코드

static void Main(string[] args)
        {
            FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
            StreamReader sr  = new StreamReader(fs);
            int value = int.Parse(sr.ReadLine()); 
            float value2 = float.Parse(sr.ReadLine());
            string str1 = sr.ReadLine();
            sr.Close();
            Console.WriteLine("{0} {1} {2}", value, value2, str1);
        }

 

■ StreamReader와 using문을 사용하는 예

static void Main(string[] args)
        {
            using (StreamReader sr = new StreamReader(new FileStream("test.txt", FileMode.Open)))
            {
                int value = int.Parse(sr.ReadLine());
                float value2 = float.Parse(sr.ReadLine());
                string str1 = sr.ReadLine();
            Console.WriteLine("{0} {1} {2}", value, value2, str1);
            }
        }

■ StreamReader만을 사용한 예

static void Main(string[] args)
        {
            StreamReader sr = new StreamReader("test.txt");
            int value = int.Parse(sr.ReadLine());
            float value2 =float.Parse(sr.ReadLine());
            string str = sr.ReadLine();
            Console.WriteLine("{0},{1},{2}",value,value2, str);
        }