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 머리