[로봇활용_13주차] C# 파일과 디렉터리 관리④ - VB.NET 사용

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

파일과 폴더 다루기 - VB.NET

C#에서 디렉터리를 복사하기 위해 재귀 함수를 직접 만들었던 것, 기억하시나요?
"C#은 왜 한 번에 처리하는 메서드를 제공하지 않을까?"하는 아쉬움이 남으셨을지도 모릅니다.
사실, 방법이 있습니다! 마치 무거운 책들을 한 번에 옮겨주는 '마법의 손수레'처럼,
디렉터리 복사를 아주 간단하게 처리해 주는 기능이 .NET 프레임워크 안에 숨어있답니다.
이번 글에서는 Microsoft.VisualBasic라이브러리를 활용하여
디렉터리를 단 한 줄의 코드로 복사하는 방법을 알아보겠습니다.

1)Microsoft.VisualBasic이란?

"잠깐만요, 저희는 C#을 하고 있는데 갑자기 Visual Basic이라니요?"

결론부터 말하면, 아무 문제 없습니다. Microsoft.VisualBasic.dll
C#과 마찬가지로 .NET에서 제공되는 표준 라이브러리입니다.
.NET 생태계 안에서는 어떤 언어에서든 참조해서 사용할 수 있습니다.
특히 파일 시스템 처리, 금융 관련 함수, 레지스트리 접근 등에서
C#의 기본 라이브러리가 제공하지 않는 편리한 유틸리티성 기능들을 포함하고 있어,
VB.NET에서 제공하는 특정 기능들을 C# 프로젝트 내에서 활용할 수 있습니다.

2)준비 작업

먼저 Microsoft.VisualBasic라이브러리를 사용하려면 프로젝트에 추가해야 합니다.

프로젝트 타입에 따라 방법이 달라요!

  • .NET Framework 프로젝트:
    Microsoft.VisualBasic을 사용하려면 직접 참조를 추가해야 합니다.
  • .NET Core 2.0+ / .NET 5.0+ 프로젝트:
    최신 .NET 환경에서는 NuGet 패키지로 관리됩니다.
    [NuGet 패키지 관리자]에서 Microsoft.VisualBasic을 검색하여 설치하면 됩니다.
    혹은 [패키지 콘솔 창]에서 Install-Package Microsoft.VisualBasic을 입력합니다.

3)단 한 줄로 처리하는 마법

이제 모든 준비는 끝났습니다. 복잡한 재귀 호출(Recursive Call)을 만드는 대신
FileSystem.CopyDirectory()메서드 하나면 모든 것이 간단하게 해결됩니다.

[코드]

using System;
using System.IO;
using Microsoft.VisualBasic.FileIO; // <-- 디렉터리 복사를 간단하게 처리해주는 마법의 손수레

// --- 테스트 환경 구성 ---
string sourceDir = @"C:\Temp\SourceProject";
string destDir = @"C:\Temp\BackupProject";

// 기존 폴더가 있다면 삭제 후 새로 생성
if (Directory.Exists(sourceDir)) Directory.Delete(sourceDir, true);
if (Directory.Exists(destDir)) Directory.Delete(destDir, true);

Directory.CreateDirectory(sourceDir);
Directory.CreateDirectory(Path.Combine(sourceDir, "data")); // 하위 폴더 생성
File.WriteAllText(Path.Combine(sourceDir, "README.md"), "원본 파일");
File.WriteAllText(Path.Combine(sourceDir, "data", "config.json"), "{}");
Console.WriteLine("테스트 환경이 구성되었습니다.");
// --- 테스트 환경 구성 끝 ---

Console.WriteLine("아무 키나 누르면 디렉터리가 복사됩니다.");
Console.ReadKey();
Console.WriteLine("디렉터리 복사를 시작합니다...");

try
{
    FileSystem.CopyDirectory(sourceDir, destDir, true);

    Console.WriteLine("디렉터리 복사가 완료되었습니다!");
}
catch (Exception ex)
{
    Console.WriteLine($"복사 중 오류 발생: {ex.Message}");
}

[실행 결과]

테스트 환경이 구성되었습니다.
아무 키나 누르면 디렉터리가 복사됩니다.
디렉터리 복사를 시작합니다...
디렉터리 복사가 완료되었습니다!

FileSystem.CopyDirectory(원본 경로, 대상 경로, 덮어쓰기 여부);

  • 원본 경로: 복사할 원본 폴더 경로입니다.
  • 대상 경로: 붙여넣을 대상 폴더 경로입니다. 폴더가 존재하지 않으면 알아서 생성합니다.
  • 덮어쓰기 여부: 세 번째 인자는 덮어쓰기 여부를 결정하는 bool값입니다.
    true로 설정하면 대상 위치에 같은 이름의 파일이 있을 경우 덮어씁니다.
    false일 경우, 중복 파일이 있으면 System.IO.IOException이 발생합니다.

이 메서드 하나가 내부적으로 모든 복잡한 작업을 알아서 처리해 줍니다.

4)직접 구현 vs VB.NET

그렇다면 재귀 함수 구현과 VB.NET을 사용하는 것 중 언제 어떤 것을 써야 할까요?

구분직접 구현 (재귀 호출)VB.NET
장점외부 라이브러리 의존성 없음
특정 파일 복사, 특정 폴더를 제외하는 등 세밀한 제어
코드가 매우 간결하고 직관적임
Microsoft에서 제공하는
안정적이고 최적화된 로직
단점코드가 길고 복잡하며, 예외 처리를 꼼꼼히 해야 함
코드 작성 시 실수할 여지가 있음
Microsoft.VisualBasic 참조 필요
단순 전체 복사 외의
복잡한 조건 처리 불가
추천 상황".log 파일은 제외하고 복사해주세요!"와 같이
커스텀 로직이 필요할 때
폴더 전체를 그대로 복사하는
단순하고 빠른 작업이 필요할 때

5)정리하며

C#의 기본 라이브러리를 넘어, Microsoft.VisualBasic이라는
'마법의 손수레'를 활용해 디렉터리 복사 작업을 단 한 줄로 처리하는 방법을 배웠습니다.
가끔은 이렇게 다른 도구 상자에 담긴 멋진 연장을 빌려 쓰는 지혜도 필요하답니다.

profile
🚀 미래의 엔지니어를 꿈꾸는 훈련생의 기록 📝

0개의 댓글