如何取得 FTP服务器文件时间?

Hyacinthus 2002-05-24 11:55:09
如何在DELPHI中通过NMFTP控件取得 FTP服务器文件时间?
...全文
140 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcb_fans 2002-05-27
  • 打赏
  • 举报
回复
我的代码到底哪里不满足你的要求,请说明一下吗.
Hyacinthus 2002-05-27
  • 打赏
  • 举报
回复
各位请注意,FTP服务器的意思是这上面的文件只能通过FTP指令访问(如FTP://FTP服务器IP/FTP虚拟目录/子目录/../文件名, 而且还要输入访问用户名和密码),而并不像本机的文件一样打开(如C:\TEST\SN.TXT) !!!!!
并不是说要打开机器名叫FTP的服务器上的文件。
在DELPHI中我通过TNMFTP控件进行访问和文件操作,但是不能像本机文件一样取得文件的修改、访问时间!!!! :(
现在想请教各位的是怎么取的这些文件的修改、访问时间。
dmyb7233 2002-05-27
  • 打赏
  • 举报
回复
var filename:string;
FileDateToDateTime(fileage(filename));
Hyacinthus 2002-05-27
  • 打赏
  • 举报
回复
如何取得 FTP服务器的文件时间?

HELP !!!!!!!!!!!!!!!!11111
bcb_fans 2002-05-27
  • 打赏
  • 举报
回复
我可以帮助你:-),我刚刚在CSDN注册还不到一天需要分来提高志气如果你认为下面的代码可以达到你的要求,就给一点分吧。
//----------------------------处理从服务器上返回的文件-----------------------
//----------------------------处理从服务器上返回的文件-----------------------
//----------------------------处理从服务器上返回的文件-----------------------
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;
}
lxpbuaa 2002-05-24
  • 打赏
  • 举报
回复
使用TNMTime控件。


—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”等';
I.Desire := '加不加分随你';
—————————————————————————————————


       
Hyacinthus 2002-05-24
  • 打赏
  • 举报
回复
谁可以告诉我???
Hyacinthus 2002-05-24
  • 打赏
  • 举报
回复
TO lxpbuaa(桂枝香在故国晚秋) :
可以再详细些吗? 谢谢!

需要判断服务器文件和本地文件的新旧情况(根据文件的修改时间),
从而确定是否下载覆盖本机的文件。

本地文件的修改时间已经取得,但是FTP服务器得文件时间取不到!! :(

HELP ME !!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧