본문 바로가기

.NET/C#

FileAndDirectory

728x90
반응형


회사 일도 바쁘고 새해라가 여기저기 바쁘게 돌아다니고 그래서 제대로 포스팅을 하질 못했었습니다. 이제야 다시 마음잡고 공부하면서 포스팅을 하려고 하는데요. 집에서 하려니...모니터가 듀얼이 아니네요...거기에다 컴퓨터 사양까지 ㅎㄷㄷ
뭐 그렇다고요 ^^

이번에는 File과 Directory를 찾아주는...음...일종의 커맨드 창에서 dir를 한 것과 비슷한 효과를 낼 수 있는 방법에 대해서 알아 보려고 해요~어떤분들에게는 참 간단한 문제일 수도 있고 저같은 초보에게는 몇시간을 공부해야 겨우 만들수 있는 문제이기도 하죠 ^^

그럼 우선 디렉토리를 가져오는 방법을 한번 알아보도록 하겠습니다. 쉽게 설명을 하기 위해서 C:\의 디렉토리정보를 가져오도록 하죠. 실행 화면은 저희 집의 컴퓨터를 대상으로 한것이기 때문에 다른분들과 틀릴수 있습니다 ^^

우선 ConsoleFileManager이란 클래스를 만들도록 하겠습니다~ 다 만드셨다면 우선 디렉토리를 찾아서 출력해주는 간단한 프로그램을 만들어 보도록하죠~

    1 using System;

    2 using System.IO;

    3 

    4 namespace FileAndDirectory

    5 {

    6     class ConsoleFileManager

    7     {

    8         public void DisplayDirectory(string path)

    9         {

   10             Console.WriteLine("\n{0} 디렉토리\n",path);

   11             string[] dirs = Directory.GetDirectories(path);

   12             for (int i = 0; i < dirs.Length; i++)

   13             {

   14                 Console.WriteLine(dirs[i]);

   15             }

   16         }

   17     }

   18 }


Directory를 쓰기 위해서는 System.IO 네임스페이스가 필요하기 때문에 using System.IO;를 넣어주었습니다.
Directory 클래스는 디렉토리의 이동, 생성, 열거 등를 할 수 있는 정적메소드들을 가지고 있습니다. 단 상속이 불가능하지요
위와 같이 클래스를 만들어 주시고 메인에서는 저 클래스를 사용을 해주시면 되겠죠 다음과 같이...

    1 class Program

    2 {

    3     static void Main(string[] args)

    4     {

    5         ConsoleFileManager info = new ConsoleFileManager();

    6         info.DisplayDirectory("C:\\");

    7     }

    8 }
클래스를 호출하고 DisplayDirectory 메소드를 호출하여 C드라이브에 있는 디렉토리를 출력하게 하는것입니다. 제대로 출력이 되는지 확인해 보겠습니다. 실행해 주면 다음과 같은 결과를 볼 수 있습니다.


다음과 같이 디렉토리 정보를 출력하는 프로그램을 만들어 보았습니다. 그럼 이번에는 커맨드에서 dir의 효과를 내는 프로그램을 한번 만들어 보도록 하죠.

위에서 만든 클래스에 DisplayDirectoryInfo라는 메소드를 만들도록 하겠습니다.

    1 public void DisplayDirectoryInfo(string path)

    2 {

    3     Console.WriteLine("\n{0} 디렉토리\n", path);

    4     DirectoryInfo dl = new DirectoryInfo(path);

    5 

    6     DirectoryInfo[] directories = dl.GetDirectories();

    7     foreach (DirectoryInfo directory in directories)

    8     {

    9         Console.WriteLine("{0,-25}{1,5}{2,10}{3}", directory.LastWriteTime.ToString("yyyy-MM-dd hh:mm"), "<DIR>", string.Empty, directory.Name);

   10     }

   11     FileInfo[] files = dl.GetFiles();

   12     foreach (FileInfo file in files)

   13     {

   14         Console.WriteLine("{0,-25}{1,5}{2,10}{3}",  file.LastWriteTime.ToString("yyyy-MM-dd hh:mm"), string.Empty, file.Length, file.Name);

   15     }

   16 }

다음과 같이 메소드를 구성하겠습니다. 이번에는 Directory 클래스 대신 DirectoryInfo 클래스를 사용하였는데요. 해당 경로의 디렉토리와 파일에 대한 정보를 가져오기 위한 클래스입니다. Directory클래스와는 차이는 MSDN를 확인해주시기 바래요 ^^;; Directory 클래스는 static으로 되어 있고 DirectoryInfo 클래스는 static으로 이루어지지 않아 객체 생성을 해야만 쓸수 있지요~~ 해당 클래스에서 F12를 누르면 클래스의 구조를 볼 수 있으니 한번 확인해보시도록 하세요. 어느정도의 차이점이 있는지 확인하실수 있을것입니다.

클래스에 대한 설명은 이정도로 하고요 ^^ 위 foreach문에서는 디렉토리에 대한 정보를 출력하고 아래 foreach문에서는 파일의 정보를 출력하는 메소드 입니다. 메인에서 다음과 같이 입력을 하고요 실행해보도록하죠

    1 class Program

    2 {

    3     static void Main(string[] args)

    4     {

    5         ConsoleFileManager info = new ConsoleFileManager();

    6         info.DisplayDirectoryInfo("C:\\");

    7     }

    8 }


실행을 하면 다음과 같은 결과를 볼 수 있습니다.


어떤가요. 완전 똑같지는 않지만 커맨드창의 dir과 비슷한 모습을 한 녀석을 볼수가 있지요 ^^

File, Directory로 여러가지 재미난것을 만들 수도 있습니다. 윈도우에서 제공해주는 커맨드창이 아닌 내가 만든 커맨드창을 사용할 수도 있죠. 한번 만들어보면 재미있을껍니다 ^ㅡ^

어떠셨나요?? 그리 어렵지는 않죠?? 그렇다고 쉽다고 생각하고 그냥 넘어간다면 위험해질수도 있죠. File에 대한 건 많은 곳에서 쓰일수 있기 때문에 어느정도 어떻게 써야 하는지는 알고 넘어가는게 좋을꺼라고 생각이 듭니다 ^^

모두 좋은 시간되시고 앞으로도 더 많은 내용 전해드리도록 하겠습니다~~감사합니다~~

728x90
반응형

'.NET > C#' 카테고리의 다른 글

C# 프로세스 목록 알아오기  (1) 2010.10.11
Thread 란?  (0) 2010.10.10
Windows Forms의 시작  (2) 2010.01.19
C# Event  (0) 2010.01.18
C# delegate  (0) 2010.01.14
C# File Input/Output  (1) 2009.12.24
C# Collection  (0) 2009.12.21
Interface  (0) 2009.12.18
Class(5)  (0) 2009.12.18
형변환에 대해서...  (0) 2009.12.18