• Programming by 白影를 방문하신 여러분을 환영합니다 :)

[ArtistFTP C# 제작기 02]  파일을 다루기 위한 클래스 선언

일단 기본적으로 탐색기 UI로 만들기 때문에

파일아이콘등등 여러가지를 위해서 먼저 클래스를 선언했습니다.


    class FileTypeInfo
    {     
    }


위와 같이 'FileTypeInfo' 라는 이름으로 클래스를 선언 하였으며,

먼저 파일 형식을 구분할 간단한 열거형을 하나 선언했습니다.


    class FileTypeInfo
    {    
        public enum FileTypes
        {
            상위로=0,
            폴더,
            파일,
            실행파일,
            동영상파일,
            음악파일,
            이미지파일,
            텍스트파일,
            CD이미지파일,
            PDF파일,
            EXCEL파일,
            파워포인트파일,
            압축파일,
            한글문서파일,
            꿀뷰파일,
            Epub파일
        } 
    }


선언한 열거형이 제대로 작동하는지 확인하기 위해 다른 클래스에서 해당 열거형을 호출해 보았습니다.


이런식으로 잘나오는군요.


다음으로 제가 해준것은 파일의 사이즈를 KB 형식으로 변환해주는 메서드입니다.

윈도우 탐색기를 보면 전부 기본 사이즈가 KB로 변환되서 나오더군요.

아까 만든 public enum types {} 바로 밑에다가 만들었습니다.


        /// <summary>       
        /// 파일 크기를 KB단위로 변환한다.
        /// </summary>
        /// <param name="bytes">변환할 파일 크기
        /// 변환된 파일 크기
        public static string formatSize(long bytes)
        {
            double size = bytes;
            string formattedSize = "1 KB"; 
            // 1KB 이하의 파일들은 모두 1KB 로 표시한다.

            if (size > 1024) // 1024byte, 즉 1KB 가 넘는다면
            {
                size /= 1024; // 1024로 나누어 준다음
                formattedSize = size.ToString("n0") + " KB";
            }

            return formattedSize;
        }

주석이 달려있으므로 크게 어렵진 않으리라 믿습니다.


자 다음으로, 파일이름에서 확장자를 추출하는 메서드를 작성하도록 하겠습니다.

사실 파일이름에서 확장자를 추출하는 간단한 메서드가 이미

System.IO; 네임스페이스에 이미 존재합니다.

하지만 개인적으로 예외처리등등을 위해 일부러 따로 메서드를 만들었습니다.


        /// <summary>
        /// 파일이름에서 확장자를 추출한다.
        /// </summary>
        /// <param name="fileName">파일이름</param>
        /// <returns>파일의 확장자</returns> 
        public static string fileExt(string fileName)
        {
            return System.IO.Path.GetExtension(fileName);
        }

사실 System.IO.FileInfo 클래스를 이용해서 변수 선언후, GetExtension() 메서드를 사용하려고 하였는데,

'실제로 파일이 존재하지 않을경우' 예외가 발생하였습니다.

예외처리를 하는것보단, 그냥 경로만 가지고 확장자를 분석해야할 경우도 있을것 같아서,

저렇게 사용하였습니다.


마지막으로 파일이름을 이용해서, 확장자를 얻고, 그 확장자로 파일종류를 구분하는 메서드를 만들도록 하겠습니다.

        
        /// <summary>
        /// 파일 이름에서 파일 타입을 얻는다.
        /// </summary>
        /// <param name="fileName">파일 이름</param>
        /// <returns>파일 종류</returns>
        public static int FileType(string fileName)
        {
            string tempExt = fileExt(fileName);            
            int Type = 0;
            
            switch (tempExt.ToLower())
            {
                case ".exe":
                case ".com":
                case ".msi":
                    Type = (int)FileTypes.실행파일;
                    break;
                case ".avi":
                case ".wmv":
                case ".mpeg":
                case ".mpg":
                case ".mov":
                case ".mkv":
                case ".flv":
                case ".mp4":
                    Type = (int)FileTypes.동영상파일;
                    break;
                case ".wav":
                case ".mp3":
                case ".ogg":
                case ".aif":
                    Type = (int)FileTypes.음악파일;
                    break;
                case ".jpg":
                case ".bmp":
                case ".png":
                case ".gif":
                case ".jpeg":
                case ".ico":
                    Type = (int)FileTypes.이미지파일;
                    break;
                case ".txt":
                case ".doc":
                case ".docx":
                    Type = (int)FileTypes.텍스트파일;
                    break;
                case ".gho":
                case ".dmg":
                case ".iso":
                    Type = (int)FileTypes.CD이미지파일;
                    break;
                case ".pdf":
                    Type = (int)FileTypes.PDF파일;
                    break;
                case ".xls":
                case ".xlsx":
                    Type = (int)FileTypes.EXCEL파일;
                    break;
                case ".ppt":
                case ".pptx":
                    Type = (int)FileTypes.파워포인트파일;
                    break;
                case ".zip":
                case ".rar":
                case ".7z":
                case ".egg":
                    Type = (int)FileTypes.압축파일;
                    break;
                case ".hwp":
                    Type = (int)FileTypes.한글문서파일;
                    break;
                case ".hv3":
                    Type = (int)FileTypes.꿀뷰파일;
                    break;
                case ".epub":
                    Type = (int)FileTypes.Epub파일;
                    break;
                default:
                    Type = (int)FileTypes.파일;
                    break;
            }

            return Type;
        }

이정도로 일단 FileTypeInfo 클래스를 작성하고,

다음 포스팅은 프로그램 기본 환경 클래스를 작성해보도록 하겠습니다.

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

[ArtistFTP C# 제작기 01] 프로그램 구상 및 밑작업  (0) 2014.01.12

필자는 개인적으로 FTP 서버를 운용하고 있으며,

친구 몇명과 필요한 자료들을 공유하며 사용하고 있습니다.

하지만 친구들중에 컴맹도 몇몇 있으며,

FTP사용법 아무리 알려줘도 이해를 못하는 친구들을 위해

간단하게 전용 FTP 클라이언트를 만들 계획을 세웠습니다.


대략적으로 아래와 같은 UI로 구성하고,

다음팟플레이어나, KMPlayer 를 이용해서 바로 동영상이나 음악등을 스트리밍할수 있도록 제작해보도록

제작해보려고 합니다.


# 작업 아이디어

01. 리모트서버의 동영상을 스트리밍으로 플레이한다.

    (동영상 플레이어를 구현이 아닌, 주소를 가져와 다음팟플레이어나, KMPlayer를 이용하여 부른다.)

02. 리모트 서버상의 파일을 이동, 삭제, 이름변경등을 한다.

03. 로컬 시스템과 업로드, 다운로드가 가능하다.

04. MySQL DB를 연동하여 영화전문관 이나 드라마전문관, 파일 자료실같은 게시판형식의 폼도 구현한다.


1