회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인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 | 조회 12810
스트림
파일 데이터의 입출력

파일의 종류
파일에는 텍스트 파일과 바이너리 파일 크게 나눈다.
두가지의 차이점은 '사람'이 읽을 수 있느냐 없느냐다. 텍스트 파일은 문자들로 텍스트 에디터로 읽일 수 있으며, 바이너리는 읽을 수가 없다.
텍스트 파일은 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개(1/15페이지)
프로그래밍
번호 제목 글쓴이 조회 날짜
285 [Python] 동적 import - 모듈을 변수로 받아오기 푸딩뱃살 413 2022.10.27 10:45
284 [Python] 파이썬 3.7.7과 3.9.7의 os.path.expanduser() 차이 푸딩뱃살 456 2022.08.18 12:22
283 [Python] error: Microsoft Visual C++ 9.0 is required. 첨부파일 푸딩뱃살 684 2022.08.03 13:35
282 [Python] pyscript 첨부파일 푸딩뱃살 454 2022.06.09 11:21
281 [Python] float is / float not is 푸딩뱃살 595 2022.03.02 15:03
280 [Python] 이터널 문자열 f 푸딩뱃살 834 2022.01.27 16:35
279 [Python] is와 ==의 차이 푸딩뱃살 485 2021.11.25 15:54
278 [Python] Error: ImportError: file line 1: Ba 푸딩뱃살 917 2021.11.16 11:24
277 [Python] 파이썬 디컴파일 - uncompyle6 첨부파일 푸딩뱃살 774 2021.11.10 14:46
276 [Python] 파이썬 확장자 설명 푸딩뱃살 550 2021.11.03 14:38
275 [참고] 웹 fbx 뷰어 푸딩뱃살 470 2021.10.19 15:46
274 [Python] enumerate() 푸딩뱃살 500 2021.10.13 14:44
273 [Python] 아나콘다에서 가상 환경 첨부파일 푸딩뱃살 721 2020.11.21 00:26
272 [Python] pip로 설치 때 퍼미션 에러 사진 첨부파일 푸딩뱃살 1267 2020.06.06 17:13
271 [Python] OpenCV 10-3. 이미지 Thresholding - Otsu's Binarizatio 사진 푸딩뱃살 674 2020.06.05 14:01
270 [Python] OpenCV 10-2. 이미지 Thresholding - Adaptive Threshold 사진 푸딩뱃살 694 2020.06.05 13:58
269 [Python] OpenCV 10-1. 이미지 Thresholding 사진 푸딩뱃살 578 2020.06.05 13:56
268 [Python] OpenCV 9-2. 색 추적 푸딩뱃살 773 2020.06.02 23:29
267 [Python] OpenCV 9-1. 색공간 바꾸기 푸딩뱃살 640 2020.06.02 23:27
266 [Python] OpenCV 8-3. 이미지 비트 연산 사진 푸딩뱃살 530 2020.06.02 23:21