본문 바로가기
📁 [4] 개발자 정보 & 코드 노트/C#

C# Windows Forms 강의 69편: 파일 탐색기 애플리케이션 제작 (TreeView와 ListView 활용)

by wawManager 2025. 4. 12.

 

1. 강의 개요

이번 강의에서는 Windows Forms에서 TreeViewListView 컨트롤을 활용하여
간단한 파일 탐색기 애플리케이션을 제작합니다.
TreeView를 통해 폴더 구조를 계층적으로 표시하고,
ListView로 선택된 폴더의 파일 목록을 표시하며,
파일 클릭 시 자세한 정보를 확인할 수 있는 기능을 구현합니다.


2. 학습 목표

  • TreeView와 ListView 컨트롤 사용법 학습
  • 디렉터리 및 파일 탐색 기능 구현
  • 파일 속성(이름, 크기, 수정 날짜) 표시
  • 파일 더블 클릭 시 실행 기능 구현

3. 기능 요구사항

필수 기능

1️⃣ TreeView를 사용한 폴더 탐색:

  • PC의 폴더 구조를 계층적으로 표시

2️⃣ ListView를 사용한 파일 표시:

  • 선택된 폴더의 파일을 ListView에 표시

3️⃣ 파일 속성 표시:

  • 파일 이름, 크기, 수정 날짜 표시

4️⃣ 파일 실행:

  • ListView에서 파일 더블 클릭 시 파일 실행

4. 실습: 파일 탐색기 애플리케이션 제작

1️⃣ 폼 구성

  • 폼(Form) 이름: Form1
  • 컨트롤 배치

컨트롤 타입 이름 위치 크기

TreeView treeViewFolders 폼 왼쪽 (300 x 500)
ListView listViewFiles 폼 오른쪽 (500 x 500)

📌 폼 디자인 예시:

-------------------------------------------
| [TreeView - 폴더 구조] | [ListView - 파일 목록] |
-------------------------------------------

2️⃣ 코드 작성

(1) TreeView 초기화 및 폴더 탐색 구현

using System;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApp_FileExplorer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitializeTreeView();
        }

        // TreeView 초기화
        private void InitializeTreeView()
        {
            treeViewFolders.Nodes.Clear();

            // 루트 드라이브 추가 (C:, D: 등)
            foreach (var drive in DriveInfo.GetDrives())
            {
                if (drive.IsReady)
                {
                    var rootNode = new TreeNode(drive.Name) { Tag = drive.RootDirectory };
                    treeViewFolders.Nodes.Add(rootNode);
                    LoadSubDirectories(rootNode);
                }
            }

            treeViewFolders.AfterSelect += TreeViewFolders_AfterSelect; // 폴더 선택 이벤트 연결
        }

        // 하위 디렉터리 로드
        private void LoadSubDirectories(TreeNode parentNode)
        {
            var directory = parentNode.Tag as DirectoryInfo;

            try
            {
                foreach (var subDirectory in directory.GetDirectories())
                {
                    var subNode = new TreeNode(subDirectory.Name) { Tag = subDirectory };
                    parentNode.Nodes.Add(subNode);
                }
            }
            catch
            {
                // 접근 권한 오류 무시
            }
        }

        // 폴더 선택 시 ListView에 파일 표시
        private void TreeViewFolders_AfterSelect(object sender, TreeViewEventArgs e)
        {
            var selectedDirectory = e.Node.Tag as DirectoryInfo;

            if (selectedDirectory != null)
            {
                LoadFilesToListView(selectedDirectory);
            }
        }
    }
}

(2) ListView 초기화 및 파일 로드

        // ListView 초기화 및 파일 로드
        private void LoadFilesToListView(DirectoryInfo directory)
        {
            listViewFiles.Items.Clear();

            try
            {
                foreach (var file in directory.GetFiles())
                {
                    var item = new ListViewItem(file.Name);
                    item.SubItems.Add((file.Length / 1024).ToString() + " KB");
                    item.SubItems.Add(file.LastWriteTime.ToString());
                    item.Tag = file.FullName; // 파일 경로 저장
                    listViewFiles.Items.Add(item);
                }
            }
            catch
            {
                // 접근 권한 오류 무시
            }
        }

(3) 파일 실행 기능

        // ListView 파일 더블 클릭 이벤트
        private void ListViewFiles_DoubleClick(object sender, EventArgs e)
        {
            if (listViewFiles.SelectedItems.Count > 0)
            {
                var selectedFile = listViewFiles.SelectedItems[0].Tag as string;

                if (!string.IsNullOrEmpty(selectedFile))
                {
                    try
                    {
                        System.Diagnostics.Process.Start(selectedFile); // 파일 실행
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"파일 실행 실패: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

(4) Designer 코드

        private void InitializeComponent()
        {
            this.treeViewFolders = new TreeView();
            this.listViewFiles = new ListView();

            // TreeView 설정
            this.treeViewFolders.Location = new System.Drawing.Point(10, 10);
            this.treeViewFolders.Size = new System.Drawing.Size(300, 500);

            // ListView 설정
            this.listViewFiles.Location = new System.Drawing.Point(320, 10);
            this.listViewFiles.Size = new System.Drawing.Size(500, 500);
            this.listViewFiles.View = View.Details;
            this.listViewFiles.Columns.Add("파일 이름", 200);
            this.listViewFiles.Columns.Add("크기", 100);
            this.listViewFiles.Columns.Add("수정 날짜", 200);
            this.listViewFiles.FullRowSelect = true;
            this.listViewFiles.DoubleClick += new System.EventHandler(this.ListViewFiles_DoubleClick);

            // Form 설정
            this.ClientSize = new System.Drawing.Size(830, 520);
            this.Controls.Add(this.treeViewFolders);
            this.Controls.Add(this.listViewFiles);
            this.Text = "파일 탐색기";
        }

3️⃣ 실행 결과

1️⃣ TreeView 폴더 탐색

  • TreeView에 PC의 폴더 구조가 계층적으로 표시
  • 폴더를 선택하면 하위 폴더와 파일 목록 로드

2️⃣ ListView 파일 표시

  • 선택된 폴더의 파일 목록이 ListView에 표시
  • 파일 이름, 크기, 수정 날짜 표시

3️⃣ 파일 실행 기능

  • ListView에서 파일 더블 클릭 시 해당 파일이 실행

5. 주요 개념 요약

  • TreeView: 계층적 데이터를 시각적으로 표현하는 컨트롤
  • ListView: 데이터를 테이블 형식으로 표시하는 컨트롤
  • DirectoryInfo & FileInfo: 디렉터리 및 파일 정보를 다루는 클래스
  • System.Diagnostics.Process.Start: 파일 실행을 위한 메서드