/// <summary> /// 获取FTP服务器上指定目录下的所有文件和目录 /// 若获取的中文文件、目录名优乱码现象 /// 请调用this.Encode进行文件编码设置,默认为UTF-8,一般改为GB2312就能正确识别 /// </summary> /// <param name="direcotry"></param> /// <returns></returns> public List <FileStruct> GetFileAndDirectoryList(string direcotry) { try { List <FileStruct> list = new List <FileStruct>(); string str = null; //WebRequestMethods.Ftp.ListDirectoryDetails可以列出所有的文件和目录列表 //WebRequestMethods.Ftp.ListDirectory只能列出目录的文件列表 FtpWebResponse response = CreateResponse(new Uri(this.Uri.ToString() + direcotry), WebRequestMethods.Ftp.ListDirectoryDetails); Stream stream = response.GetResponseStream(); using (StreamReader sr = new StreamReader(stream, this.Encode)) { str = sr.ReadToEnd(); } string[] fileList = str.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); EFileListFormat format = JudgeFileListFormat(fileList); if (!string.IsNullOrEmpty(str) && format != EFileListFormat.Unknown) { list = ParseFileStruct(fileList, format); } return(list); } catch (WebException ex) { throw ex; } }
/// <summary> /// 解析文件列表信息返回文件列表 /// </summary> /// <param name="fileList"></param> /// <param name="format">文件列表格式</param> /// <returns></returns> private List <FileStruct> ParseFileStruct(string[] fileList, EFileListFormat format) { List <FileStruct> list = new List <FileStruct>(); if (format == EFileListFormat.UnixFormat) { foreach (string info in fileList) { FileStruct fstuct = new FileStruct(); fstuct.Origin = info.Trim(); fstuct.OriginArr = fstuct.Origin.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (fstuct.OriginArr.Length == 9) { fstuct.Flags = fstuct.OriginArr[0]; fstuct.IsDirectory = (fstuct.Flags[0] == 'd'); fstuct.Owner = fstuct.OriginArr[2]; fstuct.Group = fstuct.OriginArr[3]; fstuct.Size = Convert.ToInt32(fstuct.OriginArr[4]); if (fstuct.OriginArr[7].Contains(":")) { fstuct.OriginArr[7] = DateTime.Now.Year + " " + fstuct.OriginArr[7]; } fstuct.UpdateTime = DateTime.Parse(string.Format("{0} {1} {2}", fstuct.OriginArr[5], fstuct.OriginArr[6], fstuct.OriginArr[7])); // fstuct.UpdateTime= fstuct.Name = fstuct.OriginArr[8]; if (fstuct.Name != "." && fstuct.Name != "..") { list.Add(fstuct); } } } } else if (format == EFileListFormat.WindowsFormat) { foreach (string info in fileList) { FileStruct fstuct = new FileStruct(); fstuct.Origin = info.Trim(); fstuct.OriginArr = fstuct.Origin.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (fstuct.OriginArr.Length == 4) { DateTimeFormatInfo usDate = new CultureInfo("en-US", false).DateTimeFormat; usDate.ShortTimePattern = "t"; fstuct.UpdateTime = DateTime.Parse(fstuct.OriginArr[0] + " " + fstuct.OriginArr[1], usDate); fstuct.IsDirectory = (fstuct.OriginArr[2] == "<DIR>"); if (!fstuct.IsDirectory) { fstuct.Size = Convert.ToInt32(fstuct.OriginArr[2]); } fstuct.Name = fstuct.OriginArr[3]; if (fstuct.Name != "." && fstuct.Name != "..") { list.Add(fstuct); } } } } return(list); }