안녕하세요..이제 델파이 한지 2달된 초보입니다..
지금 자동 업그레이드 프로그램을 만들고 있는데요..
로컬에서 날짜 불러오는것은 되는데 서버에서 날짜 불러 오는것이 잘 안되네요..
다 된줄 알았는데..테스트 하니깐..서버에서 날짜를 불러 오는데 중간에 제 로컬 날짜를 자꾸 불러 오네요...그래서 이렇게 고수님들의 도움을 바라고 있습니다..
혹시 서버에서 실행 파일 불러오면서 로컬에 있는 같은 실행파일 날짜를 비교해서 서버 날짜가 최근이면 다운로드 되게 해야 하는데 제발 좀 도와 주세요..
다른것은 다 되는 서버날짜가 잘 안되네요..
제발 고수님들 도와주세요...ㅜㅜ
> 안녕하세요..이제 델파이 한지 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;