Q&A

  • FTP인데요..서버날짜를 불러 오는거 좀 도와주세요
안녕하세요..이제 델파이 한지 2달된 초보입니다..

지금 자동 업그레이드 프로그램을 만들고 있는데요..

로컬에서 날짜 불러오는것은 되는데 서버에서 날짜 불러 오는것이 잘 안되네요..

다 된줄 알았는데..테스트 하니깐..서버에서 날짜를 불러 오는데 중간에 제 로컬 날짜를 자꾸 불러 오네요...그래서 이렇게 고수님들의 도움을 바라고 있습니다..

혹시 서버에서 실행 파일 불러오면서 로컬에 있는 같은 실행파일 날짜를 비교해서 서버 날짜가 최근이면 다운로드 되게 해야 하는데 제발 좀 도와 주세요..

다른것은 다 되는 서버날짜가 잘 안되네요..

제발 고수님들 도와주세요...ㅜㅜ



1  COMMENTS
  • Profile
    이석형 2001.01.03 21:57
    초보 wrote:

    > 안녕하세요..이제 델파이 한지 2달된 초보입니다..

    > 지금 자동 업그레이드 프로그램을 만들고 있는데요..

    > 로컬에서 날짜 불러오는것은 되는데 서버에서 날짜 불러 오는것이 잘 안되네요..

    > 다 된줄 알았는데..테스트 하니깐..서버에서 날짜를 불러 오는데 중간에 제 로컬 날짜를 자꾸 불러 오네요...그래서 이렇게 고수님들의 도움을 바라고 있습니다..

    > 혹시 서버에서 실행 파일 불러오면서 로컬에 있는 같은 실행파일 날짜를 비교해서 서버 날짜가 최근이면 다운로드 되게 해야 하는데 제발 좀 도와 주세요..

    > 다른것은 다 되는 서버날짜가 잘 안되네요..

    > 제발 고수님들 도와주세요...ㅜㅜ

    >



    FTP 명령중에 LS 또는 DIR 명령으로 파일의 정보를 표시한 후

    표시 내용을 분석하면 서버 파일의 일자 등을 알아낼 수 있습니다.

    ICS의 FTP 콤포넌트를 사용한 예를 붙입니다.



    function TdfmTM2Start.GetUnixFileInformation(strDirectory, strFilename : String; var fi : TFileInformation) : Boolean;

    var

    F : TextFile;

    strLine : String;

    strFileInformation : String;

    strYear : String;

    strMonth : String;

    strDay : String;

    strTime : String;

    nPos : Integer;

    nYear, nMonth, nDay : Word;

    nHour, nMin, nSec, MSec : Word;

    strMonthName : array[1..12] of String;

    i : Integer;

    begin

    // Clear Return Values

    strYear := '';

    strMonth := '';

    strDay := '';

    strTime := '';



    fi.strPermission := '';

    fi.nLink := 0;

    fi.strUserId := '';

    fi.strGroup := '';

    fi.nSize := 0;

    fi.dtFile := Now;

    fi.strFilename := '';



    // Directory

    DeleteFile(TEMP_FILE_NAME);

    FtpClient1.HostFileName := strFilename;

    FtpClient1.LocalFileName := TEMP_FILE_NAME;

    FtpClient1.DisplayFileFlag := False;

    FtpClient1.Passive := False;;

    FtpClient1.OnDisplay := Display;

    if ExecuteCmd(FtpClient1.Dir, FtpClient1.DirAsync) = False then

    begin

    ShowMessage('GetUnixFileInformation: Can not Get file information of ' + strFilename);

    Result := False;

    Exit;

    end;



    // Parse Directory Information

    AssignFile(F, TEMP_FILE_NAME);

    Reset(F);

    Read(F, strLine);

    CloseFile(F);



    if Copy(strLine, Length(strLine), 1) = #10 then

    strLine := Copy(strLine, 1, Length(strLine) - 1);

    strFileInformation := strLine;



    if Copy(strFileInformation, 1, 1) <> '-' then

    begin

    ShowMessage(strFileInformation);

    GetUnixFileInformation := False;

    Exit;

    end;



    fi.strPermission := GetNextParm(strFileInformation);

    fi.nLink := StrToInt(GetNextParm(strFileInformation));

    fi.strUserId := GetNextParm(strFileInformation);

    fi.strGroup := GetNextParm(strFileInformation);

    fi.nSize := StrToInt(GetNextParm(strFileInformation));



    strMonth := GetNextParm(strFileInformation);

    if Pos('월', strMonth) <> 0 then

    begin

    // 7월 20일 02:18 형식

    DecodeDate(Now, nYear, nMonth, nDay);

    strYear := IntToStr(nYear) + '년';

    strDay := GetNextParm(strFileInformation);

    strTime := GetNextParm(strFileInformation);

    end

    else if Pos('년', strMonth) <> 0 then

    begin

    // 2000년 1월 1일 형식

    strYear := strMonth;

    strMonth := GetNextParm(strFileInformation);

    strDay := GetNextParm(strFileInformation);

    strTime := '00:00';

    end

    else

    begin

    // Jul 31 02:18 형식



    // 1 ~ 12월명

    strMonthName[1] := 'JAN';

    strMonthName[2] := 'FEB';

    strMonthName[3] := 'MAR';

    strMonthName[4] := 'APR';

    strMonthName[5] := 'MAY';

    strMonthName[6] := 'JUN';

    strMonthName[7] := 'JUL';

    strMonthName[8] := 'AUG';

    strMonthName[9] := 'SEP';

    strMonthName[10] := 'OCT';

    strMonthName[11] := 'NOV';

    strMonthName[12] := 'DEC';



    for i := 1 to 12 do

    if UpperCase(strMonth) = strMonthName[i] then

    begin

    strMonth := IntToStr(i)+'월';

    break; // for

    end;



    DecodeDate(Now, nYear, nMonth, nDay);

    strYear := IntToStr(nYear) + '년';

    strDay := GetNextParm(strFileInformation) + '일';

    strTime := GetNextParm(strFileInformation);

    end;

    fi.strFilename := GetNextParm(strFileInformation);



    // 파일 갱신일자/시각 계산

    nYear := StrToInt(Copy(strYear, 1, Length(strYear) - 2));

    nMonth := StrToInt(Copy(strMonth, 1, Length(strMonth) - 2));

    nDay := StrToInt(Copy(strDay, 1, Length(strDay) - 2));

    nHour := StrToInt(Copy(strTime, 1, 2));

    nMin := StrToInt(Copy(strTime, 4, 2));

    fi.dtFile := EncodeDate(nYear, nMOnth, nDay) + EncodeTime(nHour, nMin, 0, 0);



    Result := True;

    end;