개발자 : 양희철 개발 기간 : 2007.12.17~2007.12.28 개발 환경 - 개발 운영체제 : Windows XP Pro - 개발 IDE : Visual Studio 2005 - 사용 언어 : C#(.NET Framework 3.0)
예전에 작은아버지께서 한번 있었으면 좋겠다고 말씀하셨었는데, 처음엔 안하려다가 시험 기간 끝나고 방학 시작하면서 뭘 할까 하다가 급하게 공부하면서 만들어 보았다.
기능은 간단하다. 한 개 또는 복수 개의 파일을 다른 드라이브로 그 경로까지 똑같이 복사해주는 프로그램이다. 예를 들면 C:\My Doc\abc.txt 파일을 D:\에다가 복사하고 싶으면 D:\My Doc\에 abc.txt라는 파일이 똑같이 복사된다.
메인 화면
메인 화면이다. 기본적으로 탐색기와 비슷한 형태를 가지고 있다. 위의 창에서 폴더 혹은 파일을 선택한 후 오른쪽 버튼을 눌러 나온 팝업 메뉴에서 백업을 누르면 백업 화면이 나온다.
메인 화면에서 폴더 몇 개를 선택하였고, 백업할 드라이브로 F드라이브를 선택하였다. 참고로 반드시 드라이브일 필요는 없다. 폴더도 루트로 가능하다.
특정한 파일만을 검색해서 백업하는 것도 가능하다.
폼의 UI는 책을 보고 따라한 것이 대부분이다. 가장 중요한 핵심은 FileSystem 클래스인데, 이 클래스가 파일의 검색 및 백업을 가능하게 해 준다.
CopyAll() : 한 폴더의 내용을 카피한다. FileCopy() : 파일을 카피한다. FindFIle() : 지정한 경로에서의 파일을 검색한다. MakeDir() : 디렉토리를 하위 디렉토리까지 만든다.
다음은 FileSystem 클래스의 소스이다.
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Windows.Forms;
Console.WriteLine("파일 검색 중 예외 발생"); Console.WriteLine(e.Message); Console.WriteLine(e.ToString()); Console.WriteLine(tdir); } }
/*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, 2); 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; } } } }