Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
35분 07초
C#은 파일 시스템과 상호 작용하는 데 강력한 기능을 제공하여 파일 조작, 디렉터리 관리 및 정보 검색과 같은 작업을 가능하게 합니다. Tim Corey는 " C#에서 파일 시스템 작업하기 - 폴더 및 파일 관리 "라는 제목의 비디오에서 C#을 사용하여 파일과 디렉터리를 다루는 기본 사항을 설명합니다.
이 글은 C#에서의 파일 시스템 작업에 대한 포괄적인 개요를 제공하고, 작업 자동화, 디렉터리 관리 및 파일 처리에 필요한 핵심 기법들을 중점적으로 다루는 것을 목표로 합니다.
C#에서 System.IO 네임스페이스는 파일 시스템과 상호 작용하기 위한 강력한 클래스를 제공합니다. 이러한 클래스는 File, FileInfo, Directory, DirectoryInfo 등이 있으며, 파일 생성, 데이터 읽기, 파일 쓰기, 지정된 경로에 지정된 파일이 이미 존재하는지 확인하는 등 다양한 파일 작업을 수행할 수 있도록 해줍니다. 이러한 클래스를 사용하면 텍스트 파일, 바이너리 파일 및 다양한 확장자를 가진 파일을 다룰 수 있습니다. Create(), Exists(), Delete()와 같은 메서드를 통해 개발자가 파일 및 디렉터리를 효과적으로 관리할 수 있습니다.
예를 들어, File 클래스에는 파일이 이미 존재하는지 확인하거나 새 파일을 생성하거나 읽기, 쓰기, 추가 모드 등에서 파일을 열 수 있는 정적 메서드가 포함되어 있습니다. FileInfo 클래스를 사용하여 파일의 생성 시간이나 전체 경로와 같은 파일에 대한 추가 정보를 얻을 수도 있습니다. DirectoryInfo 클래스는 디렉터리 작업, 파일 가져오기 또는 새 디렉터리 생성 등을 수행할 수 있도록 해줍니다. 이러한 클래스와 메서드는 기존 파일과 새 파일을 모두 처리하고, 여러 파일을 관리하며, 심지어 바이트 수준에서 파일 데이터를 처리할 수 있는 유연성을 제공하여 C#을 파일 시스템 작업에 강력한 도구로 만들어 줍니다.
Tim은 파일 백업 생성, 파일 정리, 파일 정보 검색과 같은 파일 관련 작업을 자동화하는 데 있어 C#의 강력한 기능들을 강조하며 발표를 시작합니다. 그는 실용적인 예제와 교육 자료를 통해 C# 학습을 더 쉽게 만드는 것이 자신의 목표라고 밝히며 영상을 시작합니다.
Tim은 .NET Framework 사용하여 "FileSystemDemo"라는 새로운 콘솔 애플리케이션을 처음부터 만들기 시작합니다. 그는 이 시연에서 .NET .NET Core 보다 .NET Framework 선택한 이유를 강조합니다.
using System;
using System.IO;
namespace FileSystemDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
}Imports System
Imports System.IO
Namespace FileSystemDemo
Module Program
Sub Main(args As String())
Console.ReadLine()
End Sub
End Module
End Namespace팀은 데모를 위해 자신의 시스템에서 특정 디렉토리를 가리키는 루트 경로 변수를 설정합니다.
string rootPath = @"C:\temp\demos\filesystem";Dim rootPath As String = "C:\temp\demos\filesystem"그는 @ 기호가 경로에 있는 백슬래시를 이스케이프하지 않고도 사용할 수 있도록 한다고 설명합니다.
Tim은 지정된 루트 경로 내의 모든 디렉터리를 Directory.GetDirectories 메서드를 사용하여 검색하는 방법을 보여줍니다.
string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
Console.WriteLine(directory);
}Dim directories As String() = Directory.GetDirectories(rootPath)
For Each directory As String In directories
Console.WriteLine(directory)
Next이 코드는 루트 디렉터리 내의 모든 하위 디렉터리의 전체 경로를 출력합니다.

검색에 하위 디렉터리를 포함하려면 Tim이 검색 패턴과 검색 옵션을 GetDirectories 메서드에 추가합니다.
string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
Console.WriteLine(directory);
}Dim allDirectories As String() = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories)
For Each directory As String In allDirectories
Console.WriteLine(directory)
Next이 수정 사항은 모든 하위 디렉터리가 검색에 포함되도록 합니다.
Tim은 디렉터리 클래스와 지정된 루트 경로 내의 모든 파일을 Directory.GetFiles 메서드를 사용하여 검색하는 방법을 보여줍니다.
string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
Console.WriteLine(file);
}Dim files As String() = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories)
For Each file As String In files
Console.WriteLine(file)
Next이 코드는 루트 디렉터리와 그 하위 디렉터리에 있는 모든 파일의 전체 경로를 출력합니다.

Tim은 Path 클래스를 사용하여 파일 이름과 경로를 추출하는 방법을 설명합니다. 여기에는 파일 확장자를 제외한 파일 이름과 각 파일의 디렉터리 이름을 가져오는 작업이 포함됩니다.
foreach (string file in files)
{
Console.WriteLine(Path.GetFileName(file)); // File name with extension
Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}For Each file As String In files
Console.WriteLine(Path.GetFileName(file)) ' File name with extension
Console.WriteLine(Path.GetFileNameWithoutExtension(file)) ' File name without extension
Console.WriteLine(Path.GetDirectoryName(file)) ' Directory name
Next이 코드 조각은 지정된 경로에 있는 동일한 파일의 여러 부분을 추출하여 출력하는 방법을 보여줍니다.
Tim은 (12:10)에서 FileInfo 클래스를 사용하여 파일에 대한 세부 정보를 검색하는 방법을 보여줍니다. 여기에는 파일 크기, 마지막 접근 시간, 생성 시간 및 기타 속성을 가져오는 것이 포함됩니다.
foreach (string file in files)
{
FileInfo info = new FileInfo(file);
Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}For Each file As String In files
Dim info As New FileInfo(file)
Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes")
Next이 코드 조각은 파일 이름과 파일 크기(바이트)를 출력합니다. 팀은 이 크기를 1024로 반복해서 나누면 킬로바이트나 메가바이트로 변환할 수 있다고 언급했습니다.
그는 FileInfo 클래스가 제공하는 기타 유용한 속성을 설명합니다:
LastWriteTime: 파일이 마지막으로 수정된 시간.
LastAccessTime: 파일에 마지막으로 접근한 시간.
CreationTime: 파일의 생성 시간.
Attributes: 읽기 전용, 아카이브 등의 파일 속성.
Tim은 (15:11)에서 다양한 파일 시스템 작업을 자동화하기 위해 C#을 사용하는 방법에 대해 논의합니다. 여기에는 디렉터리 생성, 파일 또는 디렉터리 존재 여부 확인 및 기타 반복적인 작업이 포함될 수 있습니다.
Tim은 Directory.Exists 메서드를 사용하여 디렉터리가 존재하는지 확인하는 방법을 보여줍니다. 이는 작업을 수행하기 전에 필요한 디렉터리가 있는지 확인하는 데 유용합니다.
string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
Console.WriteLine("Directory exists");
}
else
{
Console.WriteLine("Directory does not exist");
}Dim newPath As String = "C:\temp\demos\filesystem\subfolderC"
If Directory.Exists(newPath) Then
Console.WriteLine("Directory exists")
Else
Console.WriteLine("Directory does not exist")
End If이 코드는 디렉터리의 존재 여부를 확인하고 적절한 메시지를 출력합니다.
Tim은 Directory.CreateDirectory 메서드를 사용하여 새 디렉터리를 만드는 방법을 설명합니다. 이 메서드는 지정된 경로에 디렉터리와 하위 디렉터리가 존재하지 않는 경우 모두 생성합니다.
string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");Dim newPath As String = "C:\temp\demos\filesystem\subfolderC\sub-subfolderD"
Directory.CreateDirectory(newPath)
Console.WriteLine("Directories created")Tim은 이 방법이 기존 파일이나 디렉터리를 덮어쓰지 않고 지정된 경로와 하위 디렉터리를 생성한다는 것을 보여줍니다.
Tim은 (21:35)에서 File.Copy 메서드를 사용하여 한 디렉터리에서 다른 디렉터리로 파일을 복사하는 방법을 보여줍니다. 이 기능은 파일을 백업하거나 파일을 여러 폴더로 정리하는 데 유용할 수 있습니다.
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");
foreach (string file in files)
{
string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
File.Copy(file, destFile, true);
}Dim files As String() = Directory.GetFiles(rootPath)
Dim destinationFolder As String = Path.Combine(rootPath, "subfolderA")
For Each file As String In files
Dim destFile As String = Path.Combine(destinationFolder, Path.GetFileName(file))
File.Copy(file, destFile, True)
Next이 예에서는 파일이 루트 디렉터리에서 subfolderA로 복사되며, true 매개변수로 인해 기존 파일이 덮어쓰여집니다.
Tim은 인덱스를 사용하는 for 루프를 이용하여 복사 과정 중에 파일 이름을 바꾸는 방법도 보여줍니다.
for (int i = 0; i < files.Length; i++)
{
string destFile = Path.Combine(destinationFolder, $"{i}.txt");
File.Copy(files[i], destFile, true);
}For i As Integer = 0 To files.Length - 1
Dim destFile As String = Path.Combine(destinationFolder, $"{i}.txt")
File.Copy(files(i), destFile, True)
Next이 코드는 파일을 대상 디렉터리로 복사하고 그들을 0.txt, 1.txt 등으로 순차적으로 이름을 변경합니다.
Tim은 덮어쓰기 없이 기존 파일을 처리하고 예외를 피하기 위해 덮어쓰기 매개변수를 false으로 설정하는 방법을 설명합니다. 이렇게 하면 기존 파일이 덮어쓰이는 것을 방지하고 파일이 이미 존재하는 경우 예외를 발생시킵니다.
try
{
File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
Console.WriteLine($"File already exists: {ex.Message}");
}Try
File.Copy(sourceFile, destFile, False)
Catch ex As IOException
Console.WriteLine($"File already exists: {ex.Message}")
End Try이러한 접근 방식은 파일 복사본을 안전하게 관리하고 파일을 덮어쓰면 안 되는 상황을 처리하는 데 도움이 됩니다.
Tim은 (28:28)에서 File.Move 메서드를 사용하여 파일을 이동하는 방법을 보여줍니다. File.Copy와 달리, File.Move 메서드에는 덮어쓰기 옵션이 없으며, 대상 파일이 이미 존재하면 예외를 발생시킵니다.
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");
foreach (string file in files)
{
string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
File.Move(file, destFile);
}Dim files As String() = Directory.GetFiles(rootPath)
Dim destinationFolder As String = Path.Combine(rootPath, "subfolderA")
For Each file As String In files
Dim destFile As String = Path.Combine(destinationFolder, Path.GetFileName(file))
File.Move(file, destFile)
Next이 코드는 파일을 루트 디렉터리에서 subfolderA로 이동시키고 원본 디렉터리에서 제거합니다.
Tim은 개발자들이 C#을 사용하여 파일 시스템 작업을 자동화하고 유틸리티 애플리케이션을 만드는 다양한 방법을 생각해 보도록 권장합니다. 그는 간단한 작업부터 시작하여 점차 더 복잡한 자동화 솔루션을 구축할 것을 제안합니다.
유틸리티 앱의 예:
임시 파일 정리 : 임시 파일을 자동으로 삭제하여 저장 공간을 확보합니다.
외장 드라이브 백업 : 중요한 파일을 외장 드라이브에 복사하는 백업 도구를 만드세요.
프로젝트 폴더 동기화 : 컴퓨터와 USB 드라이브 간의 프로젝트 폴더를 동기화하여 최신 변경 사항이 항상 백업되고 복원되도록 합니다.
Tim Corey의 C#을 이용한 파일 시스템 작업 탐구는 파일 작업 자동화 및 디렉터리 관리에 대한 실질적인 통찰력을 제공합니다. 그의 사례를 따르면 개발자들은 일상적인 파일 관리 작업을 효율적으로 자동화하고 맞춤형 유틸리티 애플리케이션을 만들 수 있습니다.
이러한 개념을 더 깊이 이해하고 실제로 어떻게 적용되는지 보려면 Tim Corey의 C# 파일 시스템 관련 전체 영상을 시청하시기를 강력히 권장합니다. 그의 상세한 설명과 실용적인 예시는 여러분이 파일 관리 애플리케이션에 대한 이해를 더욱 확고히 하고, 자신만의 애플리케이션 개발 능력을 키우는 데 도움을 줄 것입니다.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy