회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


스트림 (stream) - 문자, 바이너리 읽기/쓰기

푸딩뱃살 | 2015.11.14 18:24 | 조회 12779
스트림
파일 데이터의 입출력

파일의 종류
파일에는 텍스트 파일과 바이너리 파일 크게 나눈다.
두가지의 차이점은 '사람'이 읽을 수 있느냐 없느냐다. 텍스트 파일은 문자들로 텍스트 에디터로 읽일 수 있으며, 바이너리는 읽을 수가 없다.
텍스트 파일은 C# 소스, html, 텍스트 파일들
바이너리 파일은 exe 실행 파일, 그림 파일, 사운드 파일 등이 있다.

스트림
파일을 읽기, 쓰기에 대한 데이터의 흐름을 스트림이라 한다. 읽기 쓰기에 스트림 전용 클래스에서 생성한 객체를 사용한다.
스트림은 취급하는 데이터에 따라 문자 스트림, 바이트 스트림으로 나눈다.
문자 스트림 : Unicode 문자의 데이터를 취급하며, 입출력할 때 OS의 사양이나 설정에 기초하여 문자나 줄바꿈 코드가 변환된다.
바이트 스트림 : 바이너리 데이터를 취급하며 입출력할 때 변환이 수행되지 않는다.

스트림 선언
System.IO 네임스페이스에 데이터를 읽고 쓸 수 있는 메소드가 있다.
// 네임스페이스 선언
using System.IO; 

읽기/쓰기 모드                        
처리 의미
FileMode.Open  기존의 파일을 연다.
FileMode.OpenOrCreate  파일이 없으면 만든 후에 연다.
FileMode.Append  추가 기록 모드로 연다. 파일이 없으면 만든다.
FileMode.Create  파일을 만든다. 같은 이름의 파일이 있으면 이전 파일을 지운다.
FileMode.CreateNew  파일을 만든다. 같은 이름의 파일이 있으면 예외가 발생한다.


문자 읽고 쓰기
문자 파일을 읽고 쓰기를 해보자.

문자 읽기
텍스트 데이터 파일을 읽는 방법. UTF-8 형식의 파일 file.txt로 만들고 읽어보도록 해보자.
// 1. 파일을 연다.
// FileStream 클래스를 사용하여 스트림을 만들고, StreamReader 읽기용 클래스에 전달한다.
// FileMode.Open 열기 모드: 파일을 여는 방법을 지정
FileStream fs = new FileStream("file.txt", FileMode.Open);
StreamReader r = new StreamReader(fs);

// 2. 데이터를 읽는다.
// StreamReader 클래스의 ReadLine() 메소드를 사용
string s = r.ReadLine();  // s : 읽은 문자열을 저장하는 변수
                          // ReadLine() : 한 행의 문자열을 읽어 반환한다.
                          // 읽어 들이지 못할 때는 null을 반환한다.

// 3. 파일을 닫는다.
// StreamReader 클래스의 Close() 메소드를 사용
r.Close();

Text.txt 파일에 내용을 넣고, 코드와 같은 경로의 UTF-8 형식으로 저장
// 예제
using System;
using System.IO;

class ReadText
{
    static void Main()
    {
        FileStream fs;

        try  // 예외처리
        {
            fs = new FileStream("Text.txt", FileMode.Open);  // 파일 읽기 모드
        }
        catch(IOException)
        {
            Console.WriteLine("파일을 열 수 없다.");  // 파일이 없으면 출력
            return;
        }

        StreamReader r = new StreamReader(fs);  // 파일 열기

        string s;  // 파일 읽기
        int i = 1;
        while ((s = r.ReadLine()) != null)
        {
            Console.WriteLine(i + ":" + s);  // 한줄씩 출력
            i++;
        }
        r.Close();  // 파일 닫기
    }
}
결과
Text.txt안의 내용을 한줄씩 출력


문자 쓰기
텍스트 데이터 파일을 쓰는 방법. file.txt 파일에 쓰도록 해보자.
// 1. 파일을 연다.
// FileStream 클래스를 사용하여 스트림을 만들고 StreamWriter 쓰기용 클래스에 전달한다.
// FileMode.Create : 새로 파일을 만든다.
FileStream fs = new FileStream("File.txt", FileMode.Create);
StreamWriter w = new StreamWriter(fs);

// 2. 데이터를 쓴다.
// Write() 메소드, 인수로 전달된 데이터를 파일에 넣는다.(UTF-8 형식으로 넣는다.)
w.Write("헬로 월드");

// 3. 파일을 닫는다.
w.Close();

Text.txt 파일을 생성하고 내요을 넣는다.(쓴다)
// 예제
using System;
using System.IO;

class WriteText
{
    static void Main()
    {
        FileStream fs;

        try  // 예외처리
        {
            fs = new FileStream("Text.txt", FileMode.Create);  // 파일 쓰기 모드
        }
        catch(IOException)
        {
            Console.WriteLine("파일을 열 수 없다.");  // 파일이 없으면 출력
            return;
        }

        StreamWriter w = new StreamWriter(fs);  // 파일 열기

        w.Write("파일을 만들었다.");  // 파일 쓰기
        
        w.Close();  // 파일 닫기
    }
}
결과
'파일을 만들었다'의 내용이 담긴 Text.txt 파일을 생성


바이너리 읽고 쓰기
바이너리 파일을 읽고 쓰기를 해보자.

바이너리 읽기
// 1. 파일을 연다
// FileStream 클래스를 사용하여 스트림을 만들고 BinaryReader 바이너리 읽기용 클래스에 전달한다.
FileStream fs = new FileStream("file.dat", FileMode.Open);
BinaryReader r = new BinaryReader(fs);

// 2. 데이터를 읽는다.
// BinaryReader 클래스의 Read() 메소드를 사용한다.
// n : 읽어 들인 바이트 수을 담을 변수
// Read() : 배열에 데이터를 읽어 드린다.
// buf : 데이터를 받은 byte형의 배열
// 0 : 읽어 들이기 시작 위치
// 3 : 읽어 들이는 바이트 수
int n = r.Read(buf, 0, 3);

// 3. 파일을 닫는다.
r.Close();

바이너리 쓰기
// 1. 파일을 열기
// FileStream 클래스를 사용하여 스트림을 만들고 BinaryWriter 바이너리 쓰기용 클래스에 전달한다.
FileStream fs = new FileStream("File.dat", FileMode.Create);
BinaryWriter w = new BinaryWriter(fs);

// 2. 데이터를 쓴다.
int n = w.Write(buf, 0, 3);

// 3. 파일을 닫는다.
w.Close();

참고) C#이 보이는 그림책
285개(6/15페이지)
프로그래밍
번호 제목 글쓴이 조회 날짜
185 [PHP] 회원가입 + 로그인 스크립트 (with Unity) [2+1] 푸딩뱃살 12240 2015.12.06 17:31
184 [C#] C# 추천 서적 푸딩뱃살 1320 2015.12.06 17:16
183 [C/C++] C++ 참고 사이트 푸딩뱃살 1181 2015.12.04 16:13
182 [PHP] 클래스 푸딩뱃살 3580 2015.12.04 14:40
181 [PHP] CodeIgniter(코드이그나이트) 첨부파일 푸딩뱃살 2931 2015.12.04 14:40
180 [C#] Delegate (델리게이트) (with Unity) 푸딩뱃살 6266 2015.12.01 10:44
179 [PHP] php 함수 푸딩뱃살 2218 2015.11.30 15:33
178 [PHP] Dictionary (딕셔너리) 첨부파일 푸딩뱃살 2868 2015.11.27 12:37
177 [PHP] 배열 푸딩뱃살 2170 2015.11.27 12:37
176 [PHP] 변수 선언 / 산술 연산 푸딩뱃살 2182 2015.11.27 11:14
175 [C#] Dictionary (딕셔너리) (with Unity) 첨부파일 [3+3] 푸딩뱃살 14483 2015.11.25 10:29
174 [C#] List (리스트) (with Unity) 첨부파일 푸딩뱃살 12087 2015.11.24 10:22
173 [C#] Generic (제네릭) (with Unity) 푸딩뱃살 4888 2015.11.22 12:32
172 [C/C++] Templete (템플릿) 푸딩뱃살 2045 2015.11.22 12:15
171 [C#] 키보드 입력 푸딩뱃살 3568 2015.11.21 18:00
170 [C#] 예외와 예외 처리 푸딩뱃살 4122 2015.11.21 17:39
169 [C#] Struct (구조체) (with Unity) 푸딩뱃살 5122 2015.11.18 22:08
168 [C#] Property (프로퍼티) (with Unity) 푸딩뱃살 2443 2015.11.18 10:50
167 [C#] interface (인터페이스) (with Unity) 첨부파일 푸딩뱃살 3306 2015.11.15 17:32
>> [C#] 스트림 (stream) - 문자, 바이너리 읽기/쓰기 푸딩뱃살 12780 2015.11.14 18:24