Beispiel #1
0
        public OverwriteResult ShowOverwriteDialog(String sourceFile, String destFilePath)
        {
            this.destFile           = destFilePath;
            this.lblSourceFile.Text = String.Format("{0}{1}", "이동 대상 파일 : ", sourceFile);
            this.lblTargetName.Text = String.Format("{0}{1}", "기존 파일 : ", destFilePath);
            this.lblNewName.Text    = String.Format("{0}{1}", "변경 될 파일명 : ", GPUtil.GetNewTargetName(destFilePath));

            this.pbThumbOriginal.Image = GPUtil.GetThumbNail(sourceFile, 150, 100);
            this.pbThumbNew.Image      = GPUtil.GetThumbNail(destFilePath, 150, 100);

            return(ShowOverwriteDialog());
        }
Beispiel #2
0
        public static Bitmap GetThumbNail(String filePath, int thumbWidth, int thumbHeight)
        {
            Bitmap thumbNail = GPUtil.GetResizeImage(filePath, 150, 100);

            // Return default image
            if (null == thumbNail)
            {
                return(Properties.Resources.noPreview);
            }

            return(thumbNail);
        }
Beispiel #3
0
        private String GetExifDateFileName(string filePath)
        {
            String   dateTime = GPUtil.GetExifDate(filePath);
            FileInfo fi       = new FileInfo(filePath);

            if (true == String.IsNullOrEmpty(dateTime)) // Exif 정보가 없는 경우
            {
                // 마지막 수정일을 파일명으로 사용
                dateTime = fi.LastWriteTime.ToString("yyyy-mm-dd__HH-mm-ss");
            }
            else // Exif 정보 있음
            {
                dateTime = dateTime.Replace(" ", "__");
            }

            dateTime += fi.Extension;

            return(dateTime.Trim());
        }
Beispiel #4
0
        private void DoCategories()
        {
            if (0 >= fileListView.Items.Count)
            {
                MessageBox.Show("작업할 파일이 없습니다.");
                return;
            }

            DirectoryInfo destDirectory;
            FileInfo      fileInfo;

            String           sourceFilePath;
            String           destFilePath;
            bool             isDoneWork     = false;
            int              skipCnt        = 0;
            FormOverwriteDlg overwriteDlg   = new FormOverwriteDlg();
            RawFileList      rawFileList    = new RawFileList();
            List <String>    jpgFileList    = null;
            List <FileInfo>  deleteFileList = new List <FileInfo>();

            // [JPG 파일이 없으면 RAW 파일 삭제] 옵션 선택시 RAW파일과 경로 및 파일명 비교를 위해 JPG 파일 리스트를 미리 가져온다
            if (true == chkDelRawIfJpgNotExist.Checked)
            {
                jpgFileList = GetJpgFileList(fileListView);
            }

            foreach (ListViewItem item in fileListView.Items)
            {
                // 이미 작업한 항목은 Skip 한다.
                if (true == item.SubItems[1].Text.Equals("O"))
                {
                    continue;
                }

                sourceFilePath = item.SubItems[2].Text;
                fileInfo       = new FileInfo(sourceFilePath);

                // 파일이 존재하지 않으면 skip
                if (false == fileInfo.Exists)
                {
                    continue;
                }

                // [JPG 파일이 없으면 RAW 파일 삭제] 옵션 선택시 RAW파일인 경우 삭제 리스트에 넣는다.
                // 위 옵션을 켰더라도 RAW 파일만 목록에 있는 경우도 있다. 이 때는 RAW파일만 정리가 목적이므로 이 옵션을 수행하지 않는다.
                if (null != jpgFileList)
                {
                    if (true == chkDelRawIfJpgNotExist.Checked && rawFileList.IsContain(fileInfo.Extension))
                    {
                        String lookUpName = fileInfo.FullName.Replace(fileInfo.Extension, "") + ".jpg";
                        String lookResult = jpgFileList.Find(jpg => lookUpName.ToLower().Equals(jpg.ToLower()));

                        if (true == String.IsNullOrEmpty(lookResult))
                        {
                            deleteFileList.Add(fileInfo);
                            MarkingCompleteItem(item);
                            continue;
                        }
                    }
                }

                // 아래 {}블럭은 작업 완료 후에 더 이상 필요없는 값들이므로{}블럭 처리하여 지역변수로 세팅한 것이다.
                // 그러면 블럭 이후에는 메모리를 반환되는 장점이 있어 의도적인 처리이다.
                {
                    StringBuilder destDirectoryName = new StringBuilder(fileInfo.DirectoryName);
                    if (true == chkMakeRoot.Checked)
                    {
                        destDirectoryName.Append("\\Category");
                    }

                    destDirectoryName.Append("\\");


                    String destFolderName;

                    // 파일 생성날짜를 가져온다. (폴더명으로 쓰기 위함)
                    destFolderName = item.SubItems[3].Text;

                    // 사진을 월단위로 분류 한다.
                    if (true == chkCategoryByMonth.Checked)
                    {
                        destFolderName = destFolderName.Substring(0, 7);
                    }

                    // 옵션에 따라 날짜형식에 "-"를 포함하지 않는다.
                    if (false == chkUseDash.Checked)
                    {
                        destFolderName = destFolderName.Replace("-", "");
                    }

                    // 옵션에 따라 날짜 형식을 4자리 또는 2자리로 사용한다.
                    if (false == chkDateFormat.Checked)
                    {
                        destFolderName = destFolderName.Substring(2);
                    }

                    destDirectoryName.Append(destFolderName);


                    if (true == chkSepertateRawFile.Checked)
                    {
                        if (true == rawFileList.IsContain(fileInfo.Extension))
                        {
                            destDirectoryName.Append("\\Raw");
                        }
                    }

                    destDirectory = new DirectoryInfo(destDirectoryName.ToString());


                    // 대상 디렉토리가 존재하지 않는 경우에는 생성한다.
                    if (false == destDirectory.Exists)
                    {
                        destDirectory.Create();
                    }
                }

                // 대상 파일 경로를 생성.
                destFilePath = destDirectory.ToString() + "\\";
                if (true == chkChangeFileName.Checked)
                {
                    destFilePath += GetExifDateFileName(sourceFilePath);
                }
                else
                {
                    destFilePath += fileInfo.Name;
                }

                destFilePath = destFilePath.Replace("\\\\", "\\");


                // 대상 경로에 동일한 파일이 존재하면 덮어쓰기 다이얼로그를 띄운다.
                try
                {
                    if (true == File.Exists(destFilePath))
                    {
                        OverwriteResult overWriteResult = OverwriteResult.Cancel;
                        overWriteResult = overwriteDlg.ShowOverwriteDialog(sourceFilePath, destFilePath);

                        switch (overWriteResult)
                        {
                        case OverwriteResult.Overwrite:     // 덮어쓰기
                            File.Delete(destFilePath);
                            break;

                        case OverwriteResult.NotMove:     // 이동 안 함
                            skipCnt++;
                            continue;

                        case OverwriteResult.Rename:     // 이름변경하여 이동
                            destFilePath = GPUtil.GetNewTargetName(destFilePath);
                            break;

                        case OverwriteResult.Cancel:     //취소
                            return;
                        }
                    }

                    File.Move(sourceFilePath, destFilePath);
                    isDoneWork = true;
                    MarkingCompleteItem(item);
                    workItems.removeItem(sourceFilePath);
                } catch (IOException ex)
                {
                    MessageBox.Show(String.Format("다른 곳에서 파일이 사용 중입니다.\n\n{0}", destFilePath), "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }


                if (true == chkAutoDeleteDoneItem.Checked)
                {
                    item.Remove();
                }
            } // end of foreach

            // 삭제할 파일이 존재하는 경우에 대한 처리
            if (0 < deleteFileList.Count)
            {
                ProcessFileDelete(deleteFileList);
            }

            if (true == isDoneWork)
            {
                MessageBox.Show("작업 완료", "Groupic");
            }
            else if (false == isDoneWork && (skipCnt != fileListView.Items.Count))
            {
                MessageBox.Show("이미 작업이 완료된 파일들 입니다.", "Groupic");
            }

            isDoneWork = false;
        }