C#如何获取FTP服务器上的某个文件夹大小和最后修改时间

zoloz 2008-01-30 11:11:09
我想通过c#取出ftp服务器上的文件夹大小,和他的最后修改时间,哪位能帮个忙?谢谢啊!
...全文
6403 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlyingLimy 2009-01-16
  • 打赏
  • 举报
回复
用request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;这个方法就可以取到老,很简单
sevilin 2008-12-23
  • 打赏
  • 举报
回复
FILESTRUCT对象是什么啊?自定义的吗?
  • 打赏
  • 举报
回复
FtpWebResponse.LastModified
FtpWebRequest.Method设置一下。包括WebRequestMethods.Ftp 这个里具体里的东西AppendFile ,DeleteFile ,DownloadFile ,GetDateTimestamp ,GetFileSize ,ListDirectory ,ListDirectoryDetails ,MakeDirectory ,PrintWorkingDirectory ,RemoveDirectory ,Rename ,UploadFile ,UploadFileWithUniqueName
这几个够你用的了吧?完全就符合你的要去了。
warrior 2008-09-25
  • 打赏
  • 举报
回复
文件夹的大小应该要通过枚举文件夹内的所有文件累加得到吧。
yudi010 2008-09-25
  • 打赏
  • 举报
回复
今天也碰到了这样的问题
但是不是获得ftp文件的修改时间,是判断文件是否是隐藏
lslsls的方法似乎获得是文件和文件列表,
查找了一些ftp常用的命令,但是也没有发现
lz的问题如果解决了麻烦给说一下方法
蒋晟 2008-02-04
  • 打赏
  • 举报
回复
ftp协议是公开的……远程主机强制关闭了一个现有的连接这样的网络问题你应该捕获到并且重试
blestcc 2008-02-01
  • 打赏
  • 举报
回复
首先要有權限
zoloz 2008-02-01
  • 打赏
  • 举报
回复
FTP远程主机强制关闭了一个现有的连接,报错!
zoloz 2008-02-01
  • 打赏
  • 举报
回复
在线等!
sunrobust 2008-01-31
  • 打赏
  • 举报
回复
ftp的List命令吧
phcis 2008-01-31
  • 打赏
  • 举报
回复
是ftp还是自己的服务器?

如果是他人的服务器应该不允许你获取这些信息的。

如果是自己的好像可以考虑用file类的某些方法去访问。具体的查找一下msdn吧。
fengyecsdn 2008-01-31
  • 打赏
  • 举报
回复
学习 帮顶 接分
zoloz 2008-01-31
  • 打赏
  • 举报
回复
加分。急等啊!
qgmzhfj 2008-01-31
  • 打赏
  • 举报
回复
在你的FTP类里要声明下文件信息

#region 文件信息结构
public struct FileStruct
{
public string Flags;
public string Owner;
public string Group;
public bool IsDirectory;
public DateTime CreateTime;
public string Name;
}
public enum FileListStyle
{
UnixStyle,
WindowsStyle,
Unknown
}
#endregion

然后获取写一些方法
#region 列出目录文件信息
/// <summary>
/// 列出FTP服务器上面当前目录的所有文件和目录
/// </summary>
public FileStruct[] ListFilesAndDirectories()
{
Response = Open(this.Uri, WebRequestMethods.Ftp.ListDirectoryDetails);
StreamReader stream = new StreamReader(Response.GetResponseStream(), Encoding.Default);
string Datastring = stream.ReadToEnd();
FileStruct[] list = GetList(Datastring);
return list;
}
/// <summary>
/// 列出FTP服务器上面当前目录的所有文件
/// </summary>
public FileStruct[] ListFiles()
{
FileStruct[] listAll = ListFilesAndDirectories();
List<FileStruct> listFile = new List<FileStruct>();
foreach (FileStruct file in listAll)
{
if (!file.IsDirectory)
{
listFile.Add(file);
}
}
return listFile.ToArray();
}

/// <summary>
/// 列出FTP服务器上面当前目录的所有的目录
/// </summary>
public FileStruct[] ListDirectories()
{
FileStruct[] listAll = ListFilesAndDirectories();
List<FileStruct> listDirectory = new List<FileStruct>();
foreach (FileStruct file in listAll)
{
if (file.IsDirectory)
{
listDirectory.Add(file);
}
}
return listDirectory.ToArray();
}
/// <summary>
/// 获得文件和目录列表
/// </summary>
/// <param name="datastring">FTP返回的列表字符信息</param>
private FileStruct[] GetList(string datastring)
{
List<FileStruct> myListArray = new List<FileStruct>();
string[] dataRecords = datastring.Split('\n');
FileListStyle _directoryListStyle = GuessFileListStyle(dataRecords);
foreach (string s in dataRecords)
{
if (_directoryListStyle != FileListStyle.Unknown && s != "")
{
FileStruct f = new FileStruct();
f.Name = "..";
switch (_directoryListStyle)
{
case FileListStyle.UnixStyle:
f = ParseFileStructFromUnixStyleRecord(s);
break;
case FileListStyle.WindowsStyle:
f = ParseFileStructFromWindowsStyleRecord(s);
break;
}
if (!(f.Name == "." || f.Name == ".."))
{
myListArray.Add(f);
}
}
}
return myListArray.ToArray();
}

/// <summary>
/// 从Windows格式中返回文件信息
/// </summary>
/// <param name="Record">文件信息</param>
private FileStruct ParseFileStructFromWindowsStyleRecord(string Record)
{
FileStruct f = new FileStruct();
string processstr = Record.Trim();
string dateStr = processstr.Substring(0, 8);
processstr = (processstr.Substring(8, processstr.Length - 8)).Trim();
string timeStr = processstr.Substring(0, 7);
processstr = (processstr.Substring(7, processstr.Length - 7)).Trim();
DateTimeFormatInfo myDTFI = new CultureInfo("en-US", false).DateTimeFormat;
myDTFI.ShortTimePattern = "t";
f.CreateTime = DateTime.Parse(dateStr + " " + timeStr, myDTFI);
if (processstr.Substring(0, 5) == "<DIR>")
{
f.IsDirectory = true;
processstr = (processstr.Substring(5, processstr.Length - 5)).Trim();
}
else
{
string[] strs = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // true);
processstr = strs[1];
f.IsDirectory = false;
}
f.Name = processstr;
return f;
}


/// <summary>
/// 判断文件列表的方式Window方式还是Unix方式
/// </summary>
/// <param name="recordList">文件信息列表</param>
private FileListStyle GuessFileListStyle(string[] recordList)
{
foreach (string s in recordList)
{
if (s.Length > 10
&& Regex.IsMatch(s.Substring(0, 10), "(-|d)(-|r)(-|w)(-|x)(-|r)(-|w)(-|x)(-|r)(-|w)(-|x)"))
{
return FileListStyle.UnixStyle;
}
else if (s.Length > 8
&& Regex.IsMatch(s.Substring(0, 8), "[0-9][0-9]-[0-9][0-9]-[0-9][0-9]"))
{
return FileListStyle.WindowsStyle;
}
}
return FileListStyle.Unknown;
}

/// <summary>
/// 从Unix格式中返回文件信息
/// </summary>
/// <param name="Record">文件信息</param>
private FileStruct ParseFileStructFromUnixStyleRecord(string Record)
{
FileStruct f = new FileStruct();
string processstr = Record.Trim();
f.Flags = processstr.Substring(0, 10);
f.IsDirectory = (f.Flags[0] == 'd');
processstr = (processstr.Substring(11)).Trim();
_cutSubstringFromStringWithTrim(ref processstr, ' ', 0); //跳过一部分
f.Owner = _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);
f.Group = _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);
_cutSubstringFromStringWithTrim(ref processstr, ' ', 0); //跳过一部分
string yearOrTime = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[2];
if (yearOrTime.IndexOf(":") >= 0) //time
{
processstr = processstr.Replace(yearOrTime, DateTime.Now.Year.ToString());
}
f.CreateTime = DateTime.Parse(_cutSubstringFromStringWithTrim(ref processstr, ' ', 8));
f.Name = processstr; //最后就是名称
return f;
}

/// <summary>
/// 按照一定的规则进行字符串截取
/// </summary>
/// <param name="s">截取的字符串</param>
/// <param name="c">查找的字符</param>
/// <param name="startIndex">查找的位置</param>
private string _cutSubstringFromStringWithTrim(ref string s, char c, int startIndex)
{
int pos1 = s.IndexOf(c, startIndex);
string retString = s.Substring(0, pos1);
s = (s.Substring(pos1)).Trim();
return retString;
}
#endregion
然后根据你的要求,来获取吧
在你的调用程序里
FileStruct[] fs = objFtp.ListFiles();
fs[i].CreateTime 是时间,至于大小,我这里没有,你可以自己加上
zoloz 2008-01-31
  • 打赏
  • 举报
回复
我试过用dos里的ftp命令,但是windows操作系统里dos的ftp命令好像没有modtime和size之类的命令。
还有我试过在.net2.0里用下面代码取过最后修改时间,但是取出来的时间不对。
reqFTP = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri("ftp://" + pServerURI + "/" + pDirectory + "/" + pFileName));

reqFTP.Method = System.Net.WebRequestMethods.Ftp.GetDateTimestamp;
reqFTP.UseBinary = true;
reqFTP.Credentials = new System.Net.NetworkCredential(pUserID, pPassword);
System.Net.FtpWebResponse response = (System.Net.FtpWebResponse)reqFTP.GetResponse();
System.IO.Stream ftpStream = response.GetResponseStream();
fileTime = response.LastModified.ToString();

ftpStream.Close();
response.Close();

return fileTime;
zoloz 2008-01-31
  • 打赏
  • 举报
回复
楼上的这个好像是取本机上的文件信息吧,我要取的是FTP服务器上的文件夹信息啊。
csshan 2008-01-31
  • 打赏
  • 举报
回复
个人觉得你需要做的类似监控程序,需要得到服务器上的文件信息,
如果你已经可以取到文件的信息了,就可以得到你要的,


FileInfo fi =new FileInfo(path)
//path 你的文件路径
int len=fi.Length; //得到文件大

//定义最后修改时间

Datetime FileModfiy
//取得最后时间
FileModfiy=fi.LastWriteTime //文件的最后修改时间


zoloz 2008-01-31
  • 打赏
  • 举报
回复
是FTP服务器,我要取的是一个文件夹的大小。

111,116

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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