
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace wf06_listview
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_Load(object sender, EventArgs e)
{
string currFolder = Environment.CurrentDirectory; // 현재 프로그램 실행경로 ./bin/debug/
DirectoryInfo di = new DirectoryInfo(currFolder);
FileInfo[] files = di.GetFiles(); //현재 디렉토리내 파일 배열
LsvFiles.BeginUpdate(); //업데이트 완료전까진 UI 갱신 중지
LsvFiles.View = View.Details; //리스트뷰 화면 자세히 보기
CboView.SelectedIndex = 0; // 뷰보기 콤보박스의 첫번째 값으로 설정
// ListView에 사용할 아이콘 지정 // 코딩으로 해도 되고 디자이ㅣ너에서 해도 됨
LsvFiles.LargeImageList = ImgLargeIcon;
LsvFiles.SmallImageList = ImgSmallIcon;
foreach (FileInfo file in files)
{
// 각 파일별로 ListViewItem 객체를 만들어서 하나씩 지정
ListViewItem lvi = new ListViewItem(file.Name); // 리스트뷰 첫번째 값
lvi.SubItems.Add(file.LastWriteTime.ToString());
var ext = Path.GetExtension(file.Name);
var extName = "";
switch (ext){
case ".exe":
extName = "응용 프로그램";
break;
case ".config":
extName = "Configuration 원본 파일";
break;
case ".pdb":
extName = "Program Debug Database";
break;
default:
extName = "기타";
break;
}
if(ext == ".exe")
{
lvi.ImageIndex = 0;
}
else
{
lvi.ImageIndex = 1;
}
lvi.SubItems.Add(extName); // 유형
var fileSize = file.Length / 1024;
lvi.SubItems.Add(string.Format("{0} KB", fileSize));
// 아이콘은 나중에
LsvFiles.Items.Add(lvi);
}
LsvFiles.EndUpdate(); // 업데이트 끝났으니 UI갱신
}
private void CboView_SelectedIndexChanged(object sender, EventArgs e)
{
var indexVal = CboView.SelectedIndex;
switch(indexVal)
{
case 0:
LsvFiles.View = View.Details;
break;
case 1:
LsvFiles.View = View.List;
break;
case 2:
LsvFiles.View = View.Tile;
break;
case 3:
LsvFiles.View = View.SmallIcon;
break;
case 4:
LsvFiles.View = View.LargeIcon;
break;
default:
LsvFiles.View = View.Details;
break;
}
}
}
}






using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace wf07_myexplorer
{
public partial class FrmExplorer : Form
{
public FrmExplorer()
{
InitializeComponent();
}
private void FrmExplorer_Load(object sender, EventArgs e)
{
// 현재 사용자 출력
WindowsIdentity identity = WindowsIdentity.GetCurrent();
LblPath.Text = identity.Name;
//현재 컴퓨터에 존재하는 드라이브 정보 검색, 트리뷰 추가
DriveInfo[] drives = DriveInfo.GetDrives();
//트리뷰에 전부 추가
foreach (DriveInfo drive in drives)
{
if(drive.DriveType == DriveType.Fixed)
{
TreeNode rootNode = new TreeNode(drive.Name);
rootNode.ImageIndex = 0;
rootNode.SelectedImageIndex = 0;
TrvDrive.Nodes.Add(rootNode);
FillNodes(rootNode);
}
}
TrvDrive.Nodes[0].Expand();
//리스트 뷰 설정
LsvFolder.View = View.Details;
LsvFolder.Columns.Add("이름", (LsvFolder.Width / 3), HorizontalAlignment.Left);
LsvFolder.Columns.Add("날짜", (LsvFolder.Width / 4), HorizontalAlignment.Left);
LsvFolder.Columns.Add("유형", (LsvFolder.Width / 5), HorizontalAlignment.Left);
LsvFolder.Columns.Add("크기", (LsvFolder.Width / 5), HorizontalAlignment.Left);
LsvFolder.FullRowSelect = true; // 한 행을 전부 선택
}
private void FillNodes(TreeNode curNode)
{
try
{
DirectoryInfo dir = new DirectoryInfo(curNode.FullPath);
//드라이브 하위폴더
foreach(DirectoryInfo item in dir.GetDirectories())
{
TreeNode newNode = new TreeNode(item.Name);
newNode.ImageIndex = 1;
newNode.SelectedImageIndex = 2;
curNode.Nodes.Add(newNode);
newNode.Nodes.Add("*");
}
}
catch (Exception)
{
MessageBox.Show("트리 오류발생!","오류 :",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
//sender : 자기자신 객체 내용 , e : 이벤트와 관련된 속성 포함
private void TrvDrive_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes[0].Text =="*")
{
e.Node.Nodes.Clear();
e.Node.ImageIndex = 1; // folder - normal
e.Node.SelectedImageIndex= 2; // folder - open
FillNodes(e.Node); // 하위폴더를 만들어줌
}
}
/// <summary>
/// 트리뷰 접기전 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TrvDrive_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
{
e.Node.ImageIndex= 1;
e.Node.SelectedImageIndex = 1;
}
/// <summary>
/// 트리노드를 마우스 클릭이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TrvDrive_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
SetLsvFolder(e.Node.FullPath);
}
private void SetLsvFolder(string fullPath)
{
try
{
LsvFolder.Items.Clear(); // 기존 리스트 삭제
DirectoryInfo dir = new DirectoryInfo(fullPath);
int dirCount = 0;
foreach (DirectoryInfo item in dir.GetDirectories())
{
ListViewItem lvi = new ListViewItem();
lvi.ImageIndex = 1;
lvi.Text = item.Name; // 0번 인덱스
LsvFolder.Items.Add(lvi);
LsvFolder.Items[dirCount].SubItems.Add(item.CreationTime.ToString());
LsvFolder.Items[dirCount].SubItems.Add("폴더");
LsvFolder.Items[dirCount].SubItems.Add(string.Format("{0} files", item.GetFiles().Length.ToString()));
dirCount++;
} // 폴더내 디렉토리 리스트뷰에 리스트업
// 파일 목록 리스트업
FileInfo[] files = dir.GetFiles();
int fileCount = dirCount; //이전 카운트가 승계되야함
foreach(FileInfo file in files)
{
LsvFolder.Items.Add(file.Name);
if(file.LastAccessTime != null)
{
LsvFolder.Items[fileCount].SubItems.Add(file.LastWriteTime.ToString());
}
else
{
LsvFolder.Items[fileCount].SubItems.Add(file.CreationTime.ToString());
}
LsvFolder.Items[fileCount].SubItems.Add(file.Attributes.ToString());
LsvFolder.Items[fileCount].SubItems.Add(file.Length.ToString());
fileCount++;
}
}
catch (Exception)
{
MessageBox.Show("리스트뷰 오류발생!", "오류 :", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

