'FileSystem'에 해당되는 글 2건

  1. 2007.12.25 FindFIle 프로그램 1
  2. 2007.12.25 FileSystem Class - 미완성
Study - Programming/C#2007. 12. 25. 22:31

검색할 파일과 경로를 입력받아서 하위디렉토리까지 포함해서 경로를 검색하는 프로그램이다.

책에 있던 파일 찾기 예제를 조금 수정했다. 원래 예제는 하위 디렉토리는 검색하지 못해서 재귀를 이용해서 만들어 보았다.

사용자 삽입 이미지

다음은 가장 핵심인 FindFile() 메서드이다. 파라미터의 str은 찾을 파일(또는 형식)이고 dir은 경로이다.

        void FindFile(string str,string dir)
        {
            string tdir = dir.Trim();

            if (dir == "")
            {
                MessageBox.Show("검색할 디렉토리를 입력하세요");
                return;
            }

            string[] files_list;
            try
            {
                DirectoryInfo dinfo = new DirectoryInfo(tdir);
                DirectoryInfo[] subdir = dinfo.GetDirectories();


                files_list = Directory.GetFiles(tdir, str);

                for (int i = 0; i < files_list.Length; i++)
                {
                    ListViewItem item1 = new ListViewItem(files_list[i], 0);

                    FileInfo finfo = new FileInfo(files_list[i]);

                    item1.SubItems.Add(finfo.Length.ToString() + "Byte");
                    item1.SubItems.Add(finfo.CreationTime.ToString());

                    lst_View.Items.Add(item1);
                }

                foreach (DirectoryInfo d in subdir)
                {
                    tdir = d.FullName;
                    if((d.Attributes & FileAttributes.System) <= 0)
                    {
                        FindFile(str,tdir);

                        files_list = Directory.GetFiles(tdir, str);

                        for (int i = 0; i < files_list.Length; i++)
                        {
                            ListViewItem item1 = new ListViewItem(files_list[i], 0);

                            FileInfo finfo = new FileInfo(files_list[i]);

                            item1.SubItems.Add(finfo.Length.ToString() + "Byte");
                            item1.SubItems.Add(finfo.CreationTime.ToString());

                            lst_View.Items.Add(item1);
                        }
                    }

                }


            }
            catch(Exception e)
            {
               
                Console.WriteLine("파일 검색 중 예외 발생");
                Console.WriteLine(e.Message);
                Console.WriteLine(e.ToString());
                Console.WriteLine(tdir);
            }
        }

처음에 자꾸 예외가 발생해서 애를 많이 먹었다. 보니 System Volume Information부분에 권한도 없이 자꾸 접근해서 프로그램이 꺼지는 것이다. 그래서 데브피아에 알아봐서

if((d.Attributes & FileAttributes.System) <= 0)

이렇게 해서 System 관련 디렉토리는 접근하지 않게 해 놓았다.

FileSystem 클래스에 이놈도 넣어 놔야지.

Posted by 머리
Study - Programming/C#2007. 12. 25. 13:06

다음주에 작은아버지께 드릴 프로그램을 위해서 만들어 본 클래스이다.

백업 프로그램인데, 모든 파일을 경로와 파일명 그대로 다른 드라이브로 옮겨 주기 위해서 만들어 클래스들

그런데 이거 참 클래스 이름 짓기가 참 난감했다. 이걸 뭐라고 해줘야 하나..
그래서 그냥 어울리지는 않지만 FileSystem이라고 이름지엇다.

class FileSystem
{
    /*CopyAll : 특정 디렉토리의 모든 폴더와 파일을 다른 드라이브로 옮기는 메서드
     * args : 원본의 경로
     * drive : 옮길 드라이브
     */
    public void CopyAll(string args,string drive)
    {
        DirectoryInfo dinfo = new DirectoryInfo(args);
        string dest;
       
        if (dinfo.Exists)
        {
            DirectoryInfo[] dir = dinfo.GetDirectories();
           
            foreach (DirectoryInfo d in dir)
            {
                CopyAll(d.FullName,drive);
            }

            FileInfo []fs = dinfo.GetFiles();

            foreach (FileInfo f in fs)
            {
                dest = f.Directory.FullName;
                dest = dest.Remove(0, 1);
                dest = dest.Insert(0, drive);
                Console.WriteLine("Copy " + f.Name + " to " + dest);
                FileCopy(f.FullName, dest, 0);
            }
        }
    }
    /* MakeDir : 디렉토리를 만드는 메서드
     * dir : 만들 디렉토리의 경로
     */
    public void MakeDir(string dir)
    {
        DirectoryInfo dinfo = new DirectoryInfo(dir);

        if (dinfo.Exists == false)
        {
            dinfo.Create();
        }
    }


    /* FileCopy : 파일을 복사하는 함수
     * src : 복사할 파일의 경로 및 파일 이름
     * dest : 복사할 목적지
     * mode : 파일을 복사할것인지, 이동할것인지 설정
     */

    public void FileCopy(string src,string dest,int mode)
    {
        FileInfo finfo = new FileInfo(src);
        FileInfo fsrc;
        if (finfo.Exists == true)
        {
            MakeDir(dest);
            dest = dest + "\\" + finfo.Name;
            switch (mode)
            {
                case 0:
                      fsrc = finfo.CopyTo(dest, true);
                    break;
                case 1:
                    finfo.MoveTo(dest);
                    break;
            }
        }
    }  
}

Posted by 머리