프로그래밍/C#

C# 파일 I/O의 모든 것: 효율적인 데이터 관리 방법

shimdh 2025. 8. 29. 09:42
728x90

프로그래밍에서 파일 입출력(I/O)은 필수적인 개념으로, 파일 시스템과의 상호작용을 통해 데이터를 읽고 쓰는 과정을 포함합니다. 특히 C#에서는 이러한 파일 작업이 로깅, 구성 관리, 데이터 저장 등 다양한 응용 프로그램에서 중요한 역할을 합니다. 이번 블로그 포스트에서는 C#에서 파일 I/O의 주요 개념과 실용적인 예제를 통해 효율적인 데이터 관리 방법을 알아보겠습니다.

파일 I/O의 기본 개념

파일 I/O의 목적

파일 I/O의 주된 목적은 프로그램 실행 중 데이터를 지속적으로 저장하여 나중에 다시 불러올 수 있도록 하는 것입니다. 이를 통해 정보의 영속성을 보장하고, 필요 시 데이터를 쉽게 접근할 수 있습니다.

파일 유형

C#에서는 다양한 파일 유형을 다룰 수 있습니다:

  • 텍스트 파일: 일반 텍스트 형식으로 저장된 파일
  • 바이너리 파일: 이진 형식으로 저장된 데이터
  • 구조화된 파일: XML, JSON 등 특정 구조를 가진 파일

파일 스트림

파일을 읽고 쓰기 위해 C#에서는 스트림을 사용합니다. 스트림은 읽거나 쓸 수 있는 바이트의 연속을 나타내며, 파일 작업의 기본 단위로 사용됩니다.

728x90

주요 파일 I/O 작업

파일 읽기

파일을 읽기 위해 StreamReader 객체를 사용합니다. 전체 내용을 한 번에 읽거나 한 줄씩 읽을 수 있습니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt"; // 파일 경로

        try
        {
            using (StreamReader sr = new StreamReader(path))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line); // 각 줄을 출력합니다
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine($"프로세스가 실패했습니다: {e.Message}");
        }
    }
}

파일 쓰기

파일에 데이터를 쓰기 위해 StreamWriter를 사용합니다. 한 번에 모든 내용을 쓸 수도 있고, 순차적으로 줄을 추가할 수도 있습니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "output.txt"; // 출력 경로

        try
        {
            using (StreamWriter sw = new StreamWriter(path))
            {
                sw.WriteLine("Hello World!");  // 첫 번째 줄 쓰기
                sw.WriteLine("This is an example.");  // 두 번째 줄 쓰기
                Console.WriteLine("데이터가 성공적으로 작성되었습니다.");
            }
        }
        catch (Exception e)
        {
            Console.WriteLine($"프로세스가 실패했습니다: {e.Message}");
        }
    }
}

파일 경로와 인코딩

파일 작업 시 절대 경로와 상대 경로를 이해하는 것이 중요합니다. 또한, 텍스트 인코딩은 파일을 읽고 쓸 때 문자가 바이트로 어떻게 표현되는지를 결정합니다(예: UTF-8).

오류 처리

파일 작업을 수행할 때는 항상 오류 처리를 구현해야 합니다. 누락된 파일이나 권한 오류와 같은 문제가 발생할 수 있기 때문입니다.

실용적인 예제

파일에서 읽기

텍스트 파일에서 모든 줄을 읽는 방법을 보여주는 예제입니다.

파일에 쓰기

텍스트 파일에 내용을 쓰는 방법을 살펴보겠습니다.

읽기 및 쓰기 작업 결합

기존 내용을 읽고 약간 수정한 후 다시 쓰는 응용 프로그램이 필요할 수 있습니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string inputPath = "input.txt";
        string outputPath = "modified_output.txt";

        try 
        {    
            using (StreamReader sr = new StreamReader(inputPath)) 
            {
                using(StreamWriter sw = new StreamWriter(outputPath)) 
                {
                    string line;    
                    while ((line = sr.ReadLine()) != null) 
                    {        
                        sw.WriteLine(line.ToUpper());  // 쓰기 전에 내용을 수정합니다    
                    }            
                }        
            }

            Console.WriteLine("내용이 수정되어 성공적으로 저장되었습니다.");
        } 
        catch(Exception e) 
        {        
            Console.WriteLine($"오류가 발생했습니다: {e.Message}");    
        }    
    }   
}

결론

C#에서 파일 I/O를 이해하면 지속적인 저장 솔루션을 포함하는 실제 응용 프로그램을 개발하는 데 필요한 필수 기능을 개발자에게 제공합니다. 이러한 개념을 숙달하면 간단한 작업을 처리할 수 있을 뿐만 아니라 더 큰 데이터 세트를 효과적으로 처리하는 강력한 응용 프로그램을 구축할 수 있습니다.

728x90