使用TNMTime控件。
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”等';
I.Desire := '加不加分随你';
—————————————————————————————————
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”等';
I.Desire := '加不加分随你';
—————————————————————————————————
可以再详细些吗? 谢谢!需要判断服务器文件和本地文件的新旧情况(根据文件的修改时间),
从而确定是否下载覆盖本机的文件。本地文件的修改时间已经取得,但是FTP服务器得文件时间取不到!! :(HELP ME !!
//----------------------------处理从服务器上返回的文件-----------------------
//----------------------------处理从服务器上返回的文件-----------------------
//----------------------------处理从服务器上返回的文件-----------------------
void __fastcall FormatServerFile(AnsiString OriginalFileName,
AnsiString& FileName,AnsiString &SizeStr,AnsiString &RealSizeStr,
AnsiString &LastAccessDateStr,AnsiString &FileOrDirStr)
{
/*---------------------------------------------------------------------------
-----------------------------------------------------------------------------
Example file returned form ftp server(OriginalFileName's value). [ 0 ][1][ 2 ][ 3 ] [ 4 ][5] [6] [7] [ 8 ...]
|-Dir Flag-| |--Size-||M| |D| |Y| |-FileName-|
月 日 年
d--------- 1 owner group 0 Dec 27 2000 Rad
---------- 1 owner group 289 Feb 9 6:24 快捷方式 Othe.lnk 特别注意:[7]处的值是这样确定的,如果该文件在本年建立,则该处的值是建立文件的
时间,否则是建立文件的年份。
-----------------------------------------------------------------------------
---------------------------------------------------------------------------*/ AnsiString str;
TStringList* Temp; //分割字符串
Temp=new TStringList();
//字符串分割函数,到处都有,你要是没有说一声,我再贴给你。
ParseToken(Temp,OriginalFileName," \t"); // 确定是目录还是文件
str=Temp->Strings[0];
if(str[1]=='d' || str[1]=='D')
FileOrDirStr="DIR";
else
FileOrDirStr="FILE"; // 获取文件的大小(一个大概值,一个实际值)
if(FileOrDirStr=="DIR")
{
SizeStr="";
RealSizeStr="";
}
else
{
RealSizeStr=Temp->Strings[4];
long Size=(long)(StrToInt64(Temp->Strings[4])/1024);
if(Size==0) Size=1;
SizeStr=FormatFloat("#,###,###",Size)+" KB"; // Used KB
} // 把文件的建立时间转换为类似2001-08-02之形式。 // 转换月
str=AnsiString(Temp->Strings[5]).UpperCase();
if(str=="JAN") str="01";
else if(str=="FEB") str="02";
else if(str=="MAR") str="03";
else if(str=="APR") str="04";
else if(str=="MAY") str="05";
else if(str=="JUN") str="06";
else if(str=="JUL") str="07";
else if(str=="AUG") str="08";
else if(str=="SEP") str="09";
else if(str=="OCT") str="10";
else if(str=="NOV") str="11";
else if(str=="DEC") str="12"; // 月日组合
if(Temp->Strings[6].Length()==1) // 2001-09-4 -->> 2001-09-04
str=str+"-0"+Temp->Strings[6];
else
str=str+"-"+Temp->Strings[6]; // 年月日组合
if(Temp->Strings[7].Pos(":")==0) // 找不到':',证明该处是年份。
str=Temp->Strings[7]+"-"+str; // 其它年建立
else
str=FormatDateTime("yyyy",Date())+"-"+str; //本年建立 LastAccessDateStr=str;
// 得到文件名
//int i=OriginalFileName.Pos(Temp->Strings[8]);
//if(i>0) FileName=OriginalFileName.SubString(i,OriginalFileName.Length()-i+1); // 上述方法存在一个致命的错误(用了半年才发现,真是惭愧),如
// -rw-rw-rw- 1 ftp ftp 17 Jul 27 16:42 1
// 将返回文件名"1 ftp ftp 17 Jul 27 16:42 1"
// 而文件名实际是"1"(文件名是"1"倒也少见:))。 // 因此在这里采用相对于建立时间往后偏移的方法来获得文件名。
int i0=OriginalFileName.Pos(Temp->Strings[5]);
AnsiString s0=OriginalFileName.SubString(i0,2048);
int i1=s0.Pos(Temp->Strings[7]);
FileName=OriginalFileName.SubString(i0+i1+Temp->Strings[7].Length(),2048); delete Temp;
}
FileDateToDateTime(fileage(filename));
并不是说要打开机器名叫FTP的服务器上的文件。
在DELPHI中我通过TNMFTP控件进行访问和文件操作,但是不能像本机文件一样取得文件的修改、访问时间!!!! :(
现在想请教各位的是怎么取的这些文件的修改、访问时间。