<문제점>

1. EasyRenamer 최초 설치 후 실행 시 DB 관련 오류가 발생합니다.

 

<원인분석>

1. EasyRenamer는 실행 시 데이터 폴더에서 마지막 작업 목록을 읽고 환경 및 DB 파일이 없으면 생성합니다.

  ⇒ 데이터 : Users / {사용자계정} / Local / AppData / Simply / EasyRenamer

2. V0.5.0.16 에서 DB를 적용하며, 데이터 폴더를 생성하는 코드보다 DB 생성을 먼저 실행했습니다.

3. 설치 해제 시 데이터 폴더를 삭제하지 않아 개발 및 테스트 환경에서 오류가 발견되지 않았습니다.

 

<변경사항>

1. EasyRenamer 실행 시 데이터 폴더를 찾고 없으면 가장 먼저 생성합니다.

2. 다음 업데이트(V 0.5.3.19)에서 패치됩니다.

텍스트 Editor 내 모든 파일명을 100개씩 가져와 수정한 후 다시 Editor로 기록하는 샘플 코드입니다.

* 파일명 내 속성 태그(<...>) 수정 주의

* 확장명 수정 시 사용할 수 없게 될 수 있으므로 주의

//  파일 개수를 얻는다.
var count = getFileCount();
if (0 == count) {
    alert("이름을 변경 할 파일이 없습니다.");
    return;
}

//  진행바 범위를 설정한다.
setProgressRange(0, count);

//  진행바를 화면에 보인다.
showProgress(true);

//  파일 개수 만큼 파일명을 변경한다.
for (index = 0; index < count && !isStop(); ) {
    var extension = "";
    //  지정한 인덱스에서 100개의 파일명을 얻는다.
    var json = getFileNames(index, 100);
    var fileNames = JSON.parse(json);

    for (file = 0; file < fileNames.length && !isStop(); ++file) {
        var fileName = fileNames[file];

        //  이름과 확장명을 분리한다.
        var dot = fileName.lastIndexOf(".");
        if (-1 != dot) {
            extension = fileName.substring(dot);
            fileName = fileName.substring(0, dot);
        }

        /*파일명을 수정한다.*/

        fileNames[file] = fileName + extension;
    }

    //  파일명을 기록한다.
    setFileNames(index, JSON.stringify(fileNames));

    //  진행바의 위치를 갱신한다.
    setProgress(index += fileNames.length);
}

//  작업 완료 메시지를 출력한다.
alert("파일명 변경이 완료됐습니다.");

//  진행바를 숨긴다.
showProgress(false);

아래 코드는 EasyRenamer 설치 시 기본적으로 제공되는 자바스크립트 코드 입니다.

Editor 내 모든 파일명을 가져와 콘솔 윈도우에 속성을 출력하는 샘플 코드입니다.

//  파일 개수를 얻는다.
var count = getFileCount();
if (0 == count) {
    alert("속성을 출력 할 파일이 없습니다.");
    return;
}
var properties = ["format","mime","size","date:creation","date:modified","date:access","time:creation","time:modified","time:access","media:artist","media:year","media:genre","media:album","media:#","duration","bitrate","framerate","Samplingrate","width","height","audio:channel","photo:aperture","photo:brightness","photo:cameramodel","photo:cameraserial","photo:exifversion","photo:exposurebias","photo:exposuretime","photo:flashmodel","photo:f","photo:focallength","photo:lensmodel","photo:meteringmode","photo:sharpness","photo:whitebalance"];

clearConsole();
showConsole(true);

//  진행바 범위를 설정한다.
setProgressRange(0, count);

//  진행바를 화면에 보인다.
showProgress(true);

//  파일 개수 만큼 파일명을 변경한다.
for (index = 0; index < count && !isStop(); ) {
    var extension = "";
    //  지정한 인덱스의 파일명을 얻는다.
    var fileName = getFileName(index);

    console("[" + 1 + index + "] " + fileName);
    for (prop = 0; prop < properties.length; ++prop) {
        console("    [" + properties[prop] + "] = " + getProperty(index, properties[prop]));
    }

    //  진행바의 위치를 갱신한다.
    setProgress(++index);
}

//  작업 완료 메시지를 출력한다.
alert("파일 속성 출력이 완료됐습니다.");

//  진행바를 숨긴다.
showProgress(false);

아래 코드는 EasyRenamer 설치 시 기본적으로 제공되는 자바스크립트 코드 입니다.

로그 1만건을 파일에 기록하는 샘플 코드입니다.

try
{
    //  로그 파일을 오픈한다.
    openLog("e:\\log.txt");

    //  진행바의 범위를 설정하고 출력한다.
    setProgressRange(0, 10000);
    showProgress(true);

    //  1만건의 로그를 기록한다.
    for (count = 0; count < 10000 && !isStop(); ) {
        log("샘플 로그");
        setProgress(++count);
    }
}
catch (err)
{
    alert(err);
}
finally
{
    //  진행바를 숨긴다.
    showProgress(false);

    //  열려진 로그 파일을 닫는다.
    closeLog();
}

<관련 설명>

1. Undo란? 실행 취소로 현 EasyRenamer 내 텍스트 에디터의 텍스트 수정, 최종 이름 변경에 대한 취소를 지원합니다.

2. 텍스트 에디터에서 텍스트가 수정되는 경우는 매우 다양하고 관련된 예외처리 로직도 복잡한 상황입니다.

3. Javascript 미리 정의된 함수 중 beginUndo, endUndo는 일정 범위의 텍스트 수정을 1개의 Undo로 그룹화 합니다.

4. beginUndo, endUndo 는 반드시 짝을 이루어 호출해야 합니다.

 

<문제점>

1. 파일명 수정이 있는 Javascript 실행 직 후 Undo 하면 2회분 Undo가 실행됩니다.

2. ①최초 목록에 파일 추가 → ②Javascript 실행 후 하단 [실행 취소] 버튼 클릭 시 목록 내 파일이 모두 제거됩니다.

 

<개선사항>

1. Javascript 미리 정의된 함수 중 beginUndo, endUndo를 제거하고 Javascript 실행 과정을 1개의 Undo로 그룹화합니다.

2. 다음 업데이트(V 0.5.2.18)에서 패치됩니다.

+ Recent posts