[로봇활용_13주차] C# 파일과 디렉터리 관리② - 직접 만들기

최윤호·2025년 11월 2일
post-thumbnail

파일과 폴더 다루기 - 직접 만들기

지난번에는 C#에서 파일과 폴더 정보를 조회하는 방법을 알아봤습니다.
이제는 여러분이 직접 C#으로 폴더와 파일을 생성하는 방법을 배워볼 차례입니다.
이번 글에서는 System.IO네임스페이스의 또 다른 주인공들을 다뤄보겠습니다.

1)핵심 클래스: Directory와 File

지난번 우리는 DirectoryInfo와 FileInfo라는 인스턴스 클래스를 사용했습니다.
하지만 이번에 사용할 Directory와 File은 정적(static) 클래스입니다.
객체를 생성할 필요 없이, 클래스 이름에 점(.)을 찍어 기능을 바로 사용할 수 있습니다.

2)똑똑한 폴더 생성 도우미

새로운 폴더(디렉터리)를 만들 때는 Directory.CreateDirectory()메서드를 사용합니다.
이 메서드는 몇 가지 편리한 특징을 가지고 있어요.

  • 만들려는 폴더가 이미 존재해도 오류를 발생시키지 않습니다. 그냥 조용히 넘어갑니다.
  • C:\MyProject\Data\Logs처럼 중간 폴더가 없어도, 전부 알아서 만들어줍니다!

이런 특징 덕분에 우리는 폴더를 확인하지 않고 바로 생성 명령을 내릴 수 있습니다.

[코드]

using System;
using System.IO;

// 1. 단순한 경로에 폴더 생성
string path1 = @"C:\Temp\NewFolder";
Directory.CreateDirectory(path1);
Console.WriteLine($"{path1} 폴더가 생성되었거나 이미 존재합니다.");

// 2. 여러 단계의 하위 폴더를 한 번에 생성
string path2 = @"C:\Temp\MyProject\Data\Logs";
Directory.CreateDirectory(path2);
Console.WriteLine($"{path2} 폴더가 생성되었거나 이미 존재합니다.");

// 존재하는지 확인 후 생성하고 싶다면?
if (!Directory.Exists(path2))
{
    Directory.CreateDirectory(path2);
    Console.WriteLine("폴더를 새로 생성했습니다.");
}
else
{
    Console.WriteLine("폴더가 이미 존재하네요!");
}

[실행 결과]

C:\Temp\NewFolder 폴더가 생성되었거나 이미 존재합니다.
C:\Temp\MyProject\Data\Logs 폴더가 생성되었거나 이미 존재합니다.
폴더가 이미 존재하네요!

잠깐! Directory와 DirectoryInfo중에서 우리는 어떤 걸 써야 할까요?

  • Directory(정적 클래스): 폴더 생성, 삭제, 이동 등
    '일회성 작업'을 간단하게 처리할 때 편리합니다.
  • DirectoryInfo(인스턴스 클래스): 특정 폴더 하나를 지정해서 그 폴더의 정보 조회,
    하위 파일 목록 가져오기 등 '다양한 작업'을 연달아 할 때 유용합니다.

3)빈 파일 만들기 (using 사용)

이제 폴더를 만들었으니 File.Create()메서드를 사용해서 파일을 만들어 볼까요?
하지만 여기에는 중요한 주의 사항이 있습니다. File.Create()는
파일을 생성함과 동시에 해당 파일에 대한 FileStream을 열어서 반환합니다.
이 스트림을 닫아주기 전까지는 파일이 계속 '사용 중'인 상태로 잠겨있게 됩니다.
따라서 using구문을 사용해서 스트림이 자동으로 닫히도록 처리해야 합니다.

[코드]

using System;
using System.IO;

string path1 = @"C:\Temp\NewFolder";
Directory.CreateDirectory(path1);

string filePath = @"C:\Temp\NewFolder\MyFile.txt";

// using 블록을 사용하면 코드가 끝나자마자 스트림이 자동으로 닫힙니다.
try
{
    using (FileStream fs = File.Create(filePath))
    {
        Console.WriteLine($"{filePath} 파일이 생성되었습니다.");
        // 지금은 파일에 아무것도 쓰지 않고 생성만 합니다.
    }
}
catch (Exception ex)
{
    Console.WriteLine($"파일 생성 중 오류 발생: {ex.Message}");
}

[실행 결과]

C:\Temp\NewFolder\MyFile.txt 파일이 생성되었습니다.

4)더 간단한 방법

'텍스트 파일' 하나만 만든다면 더 간단한 방법이 있습니다.
File.WriteAllText()메서드에 빈 문자열("")을 내용으로 전달하는 것입니다.
이 방법은 파일을 만들고, 내용을 쓰고, 닫는 것까지 한 번에 처리해 줍니다.

[코드]

using System;
using System.IO;

string path1 = @"C:\Temp\NewFolder";
Directory.CreateDirectory(path1);

string simpleFilePath = @"C:\Temp\NewFolder\MySimpleFile.log";

try
{
    // 내용이 없는 텍스트 파일을 생성하고 싶을 때 가장 간단한 방법!
    File.WriteAllText(simpleFilePath, "");
    Console.WriteLine($"{simpleFilePath} 파일이 생성되었습니다.");
}
catch (Exception ex)
{
    Console.WriteLine($"파일 생성 중 오류 발생: {ex.Message}");
}

[실행 결과]

C:\Temp\NewFolder\MySimpleFile.log 파일이 생성되었습니다.

5)정리

이제 우리는 정보를 조회할 뿐만 아니라 직접 생성까지 할 수 있게 되었습니다!

클래스메서드특징
DirectoryCreateDirectory(path)경로의 모든 폴더를 한 번에 생성. 이미 존재해도 오류 없음.
FileCreate(path)파일을 만들고 스트림을 반환. 파일이 잠길 수 있으므로 using 사용!
FileWriteAllText(path, "")텍스트 파일을 가장 간단하게 만드는 방법.
profile
🚀 미래의 엔지니어를 꿈꾸는 훈련생의 기록 📝

0개의 댓글