반응형

* 폴더 및 파일, 드라이브 목록 및 사이즈 구하기 예제

 

메인 화면

File Open 버튼 : 파일 대화 상자가 뜨게 되며, 해당 파일 선택 시 위 그림과 같이 파일의 위치 와 사이즈가

                      표시 됩니다. 다만 사이즈 표시는 기본 Byte 로 리턴 되며 이것을 KB 또는 MB 로 바꾸기

                      위한 작업을 필요 하다면 해줄 필요가 있습니다.

                      Ex) 위 그림에서 파일 사이즈를 변환 해 본다면...

                          1024 로 한번 나누게 되면 KB -> 10722 KB

                          KB 용량을 다시 1024 로 나누게 되면 10.4 MB 가 되겠습니다.

                      

파일 대화 상자

Folder Open 버튼 : 폴더 대화 상자가 뜨게 되며, 해당 폴더 선택 시 메인화면을 보듯이 폴더의 위치 와 사이즈가

                          표시 됩니다. 다만 사이즈 표시는 기본 Byte 로 리턴 되며 이것을 KB 또는 MB 로 바꾸기

                          위한 작업을 필요 하다면 해줄 필요가 있습니다.

                          File Open에서 설명 햇듯이 1024 한번 나누면 KB 두번 나누면 MB 로 변환 됨.

 

폴더 대화 상자

 

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO;

namespace CSharp_FFSize
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            //드라이브 구하기...
            DriveInfo[] dList = DriveInfo.GetDrives();

            for (int iCount = 0; iCount < dList.Length; iCount++)
            {
                //에러 나는 아이템은 추가 X ...
                try
                {
                    //드라이브 목록 및 이름, 사이즈...
                    ListViewItem lvi = new ListViewItem();
                    lvi.Text = dList[iCount].Name.ToString() + " 드라이브";
                    lvi.SubItems.Add(dList[iCount].TotalSize.ToString());
                    lvi.SubItems.Add(dList[iCount].TotalFreeSpace.ToString());

                    lvMain.Items.Add(lvi);
                }
                catch { }
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //File Open
            OpenFileDialog ofd = new OpenFileDialog();

            //파일 열기...
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                lblFilePath.Text = ofd.FileName;
                lblSize.Text = FileSize(ofd.FileName).ToString();
                /*
                 * 위 소스를 풀어서 하면은...
                 * 
                 * long lFileSize = FileSize(ofd.FileName);
                 * lblSize.Text = lFileSize.ToString();
                 * 
                 * 이렇게 구현 해도 무방 함.
                 */
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Folder Open
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == DialogResult.OK)
            {
                lblFolderPath.Text = fbd.SelectedPath ;
                lblFolderSize.Text = FolderSize(new DirectoryInfo (fbd.SelectedPath)).ToString();
                /*
                 * 위 소스를 풀어서 하면은...
                 * 
                 * DirectoryInfo d = new DirectoryInfo(fbd.SelectedPath);
                 * long lSize = FolderSize(d);
                 * lblFolderSize.Text = lSize.ToString();
                 * 
                 * 이렇게 구현 해도 무방 함.
                 */
            }
        }

        private long FileSize(string strPath)
        {
            if (strPath == "") return 0;
            FileInfo fi = new FileInfo(strPath);
            if (fi == null) return 0;
            return fi.Length;
        }

        private long FolderSize(DirectoryInfo d)
        {
            long size = 0;
            // 파일 사이즈.
            FileInfo[] fis = d.GetFiles();
            foreach (FileInfo fi in fis)
            {
                size += fi.Length;
            }
            // 하위 디렉토리 사이즈.
            DirectoryInfo[] dis = d.GetDirectories();
            foreach (DirectoryInfo di in dis)
            {
                size += FolderSize(di);
            }
            return size;
        }

        

    }
}

 

* 위 소스에 보면 FolderSize => 마지막 구문은 재귀호출하여 하위 디렉토리가 있으면 들어가서

                                         파일 사이즈 를 리턴 하게 됩니다.

 

함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라고 합니다.

이러한 형태의 구문을 가지고 있는 함수를 재귀 함수라고 불리기도 합니다.

반응형

+ Recent posts