Programming/C#

[C#] C#에서 csv파일 읽기, 쓰기, 추가 및 수정 (Open, Create, Append)

향채소 2021. 11. 5. 17:44

CSV파일이란 쉼표로 구분된 파일이며, 데이터를 저장하고 공유하기 편한 장점이 있다.

 

C#에서 CSV파일 또는 TXT파일을 불러오고 저장하는 간단한 방법을 제공하는데,

FileStream과 Stream 클래스이다. 

 

FileStream으로 원하는 경로와 파일모드를 선택하여 StreamReader나 StreamWriter로 전달하여

읽고 쓰면 되는데, 파일을 수정하는 방식은 파일을 읽어와서 그 내용을 수정 후 다시 저장하는 방식이다.

 

FileMode 종류

FileMode.Append : 파일을 열고 파일의 끝까지 검색 및 새 파일 생성

FileMode.Create : 새 파일을 만들도록 지정

FileMode.CreateNew : 새 파일을 만들도록 지정, 파일이 있을 시 예외 throw

FileMode.Open : 기존 파일을 열도록 지정

FileMode.OpenOrCreate : 기존 파일이 있을 시 열어주고 기존 파일이 없을 시 파일 생성

FileMode.Truncate : 기존 파일을 열도록 지정, 파일의 내용을 초기화

 

추가

using System.IO;
using System.Text;

 

// 파일 불러오기
            string readFile = @"C:\불러올 파일 경로.csv";
            FileStream fsOpen = new FileStream(readFile, FileMode.Open);
            StreamReader sr = new StreamReader(fsOpen, Encoding.UTF8, false);
            List<string> strList = new List<string>();

            while (!sr.EndOfStream)
            {
                string s = sr.ReadLine();
                string[] temp = s.Split(',');

                strList.Add(temp[0] + ", " + temp[1]);
            }

            // 파일 생성
            string writeFile = @"C:\파일 쓰기 경로.csv";      // 새로운 경로일 시 생성, 똑같은 경로 일 시 덮어쓰기
            FileStream fsCreate = new FileStream(writeFile, FileMode.Create);
            StreamWriter wr2 = new StreamWriter(fsCreate, Encoding.UTF8);

            for (int i = 0; i < strList.Count; i++)
            {
                wr2.WriteLine(strList[i]);
                Console.WriteLine(strList[i]);

                // 중간에 제거할 목록이 있을 시 
                //if (i != 해당 번호)
                //{}
            }

            wr2.WriteLine("Finish");     // 마지막 줄에 텍스트 추가
            wr2.Close();

            // 파일 덮어쓰기 
            string strFile = @"C:\덮어쓸 파일 경로.csv";
            FileStream fsAppend = new FileStream(strFile, FileMode.Append);
            StreamWriter wr = new StreamWriter(fsAppend, Encoding.UTF8);

            wr.WriteLine("Text1, Text2");
            wr.Close();