C#

C# 파일과 디렉토리

J개발자 2020. 12. 3. 00:28

디렉토리 선택하면 파일(하위항목)으로 열거됨.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;   //중요!!!!!!!!!!!
using System.Text;
using System.Windows.Forms;

namespace 기말고사_공부하기
{
    public partial class Form1 : Form
    {
        public DirectoryInfo dinfo;
        public DirectoryInfo[] dir;
        public int dir_count;
        string fname;

        public Form1()   //생성자
        {
            InitializeComponent();
            dir_count = 0;   //생성자에서 값 선언

        }

        private void button1_Click(object sender, EventArgs e)   //열기 버튼 클릭시
        {
            openFileDialog1.ShowDialog();
            dinfo = new DirectoryInfo(openFileDialog1.FileName);
            dinfo = dinfo.Parent;
            dir = dinfo.GetDirectories();
            dir_count = dir.Length + 1;
            
            listView1.Items.Clear();
            ListViewItem item = new ListViewItem("..", 0);
            item.SubItems.Add("");
            item.SubItems.Add("");
            item.SubItems.Add("");
            listView1.Items.Add(item);

            foreach(DirectoryInfo d in dir)
            {
                ListViewItem item1 = new ListViewItem(d.Name.ToString(), 0);
                item1.SubItems.Add(d.Attributes.ToString());
                item1.SubItems.Add("");
                item1.SubItems.Add(d.CreationTime.ToString());
                listView1.Items.Add(item1);

            }
            FileInfo[] files = dinfo.GetFiles();
            foreach(FileInfo f in files)
            {
                ListViewItem item2 = new ListViewItem(f.Name.ToString(), 1);
                item2.SubItems.Add(f.Attributes.ToString());
                item2.SubItems.Add(f.Length.ToString());
                item2.SubItems.Add(f.CreationTime.ToString());
                listView1.Items.Add(item2);

            }
            Text = dinfo.FullName.ToString();

        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void listView1_Click(object sender, EventArgs e)
        {
            int index = listView1.FocusedItem.Index;
            if(index >= dir_count)
            {
                MessageBox.Show("파일 선택함");
                return;
            }if(index != 0)
            {
                dinfo = dir[index - 1];
            }
            else
            {
                if(dinfo.Parent == null)
                {
                    MessageBox.Show("루트 디렉토리 입니다.");
                    return;

                }dinfo = dinfo.Parent;
            }
            listView1.Items.Clear();
            ListViewItem item = new ListViewItem("..", 0);
            item.SubItems.Add("");
            item.SubItems.Add("");
            item.SubItems.Add("");
            listView1.Items.Add(item);

            dir = dinfo.GetDirectories();
            dir_count = dir.Length + 1;
            foreach (DirectoryInfo d in dir)
            {
                ListViewItem item1 = new ListViewItem(d.Name.ToString(), 0);
                item1.SubItems.Add(d.Attributes.ToString());
                item1.SubItems.Add("");
                item1.SubItems.Add(d.CreationTime.ToString());
                listView1.Items.Add(item1);

            }
            FileInfo[] files = dinfo.GetFiles();
            foreach (FileInfo f in files)
            {
                ListViewItem item2 = new ListViewItem(f.Name.ToString(), 1);
                item2.SubItems.Add(f.Attributes.ToString());
                item2.SubItems.Add(f.Length.ToString());
                item2.SubItems.Add(f.CreationTime.ToString());
                listView1.Items.Add(item2);

            }
            this.Text = dinfo.FullName.ToString();
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)  //복사
        {
            fname = this.Text + "||" + listView1.FocusedItem.Text;  //선택한 아이템을 복사할떄 || 문자와 함께 복사됨
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)  //붙여넣기
        {
            try
            {
                FileInfo vf = new FileInfo(fname);  //선택한 아이템(파일)의(복사한) 정보 구함
                FileInfo cf = vf.CopyTo(this.Text + "||" + vf.Name.ToString(), true);
                ListViewItem item = new ListViewItem(cf.Name.ToString(), 1);
                item.SubItems.Add(cf.Attributes.ToString());
                item.SubItems.Add(cf.Length.ToString());
                item.SubItems.Add(cf.CreationTime.ToString());
                listView1.Items.Add(item);


            }
            catch            //실패시 오류 알림 문장
            {
                MessageBox.Show("파일 붙여 넣기 실패");   
            }
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)        //지우기
        {
            if(listView1.FocusedItem.Index == 0)
            {
                MessageBox.Show("부모 디렉토리 삭제 불가");
                return;

            }
            if(listView1.FocusedItem.Selected == true)
            {
                int i;
                FileInfo[] files = dinfo.GetFiles();
                i = int.Parse(listView1.FocusedItem.Index.ToString());
                DialogResult dr = MessageBox.Show("정말 삭제하시겠습니까","삭제",MessageBoxButtons.YesNo);
                if(dr == DialogResult.Yes)
                {
                    files[i - dir_count].Delete();
                    listView1.FocusedItem.Remove();
                }
            }
        }
    }
}