* 폴더 및 파일, 드라이브 목록 및 사이즈 구하기 예제
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 => 마지막 구문은 재귀호출하여 하위 디렉토리가 있으면 들어가서
파일 사이즈 를 리턴 하게 됩니다.
함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라고 합니다.
이러한 형태의 구문을 가지고 있는 함수를 재귀 함수라고 불리기도 합니다.
'C# Programming' 카테고리의 다른 글
[C#] 프로그램 중복 실행 방지 (0) | 2019.10.06 |
---|---|
[C#] Delay 함수 (0) | 2019.10.04 |
[C#] 레지스트리를 이용 윈도우 시작 시 프로그램 자동 실행 (3) | 2019.09.30 |
[C#] Excel File Write & Read 예제... (0) | 2019.09.28 |
[C#] File Create & Delete & Read & Write 예제 (0) | 2019.09.25 |