/// <summary> /// 获得目录和文件列表 /// </summary> /// <param name="path">上级目录</param> public List <FileDirectoryInfo> GetFileFolders(string path) { List <FileDirectoryInfo> directorys = new List <FileDirectoryInfo>(); FtpWebRequest reqFTP = CreateFtpConnection(path); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; reqFTP.KeepAlive = false; WebResponse response = null; try { response = reqFTP.GetResponse(); } catch { //patch:当前连接或最近一次连接的“KeepAlive=false”时,ftp可能返回501错误。出错后再尝试一次。 reqFTP = CreateFtpConnection(path); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; reqFTP.KeepAlive = false; response = reqFTP.GetResponse(); } Encoding encoding = Encoding.Default; if (this._decodeType == DecodeType.UTF8) { encoding = Encoding.UTF8; } StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); string line = reader.ReadLine(); FileListStyle fileListStyle = FileListStyle.Unknown; if (line != null) { fileListStyle = GetFileListStyle(line); } while (line != null) { fileListStyle = GetFileListStyle(line); FileDirectoryInfo temp = ConvertToDirectory(line, fileListStyle); if (temp != null) { if (!temp.DisplayName.StartsWith(".")) { directorys.Add(temp); } } line = reader.ReadLine(); } reader.Close(); response.Close(); return(directorys); }
/// <summary> /// 将文件详细信息字符串转换为文件类 /// </summary> private FileDirectoryInfo ConvertToDirectory(string fileName, FileListStyle style) { Match m = GetMatchingRegex(fileName); if (m == null) { return(null); } FileDirectoryInfo result = new FileDirectoryInfo(); result.DisplayName = m.Groups["name"].Value; if (m.Groups["size"].Value != string.Empty) { result.FileSize = long.Parse(m.Groups["size"].Value); } if (m.Groups["timestamp"].Value != string.Empty) { DateTimeFormatInfo formatProvider = new CultureInfo("en-US", false).DateTimeFormat; try { string dateStr = m.Groups["timestamp"].Value; switch (style) { case FileListStyle.UnixStyle: //example1:“Jan 18 2009”;example2:“Jan 11 12:29” if (dateStr.IndexOf(":") != -1) { dateStr = string.Format("{0} {1}", DateTime.Now.Year, dateStr); } result.LastEditTime = DateTime.Parse(dateStr, formatProvider); //距离当前时间(以文件服务器时间为参考点)半年以内的时间不带年份 if (result.LastEditTime.Month > DateTime.Now.Month) { result.LastEditTime = result.LastEditTime.AddYears(-1); } break; case FileListStyle.WindowsStyle: //example3:“01-11-11 06:23PM” case FileListStyle.Unknown: default: result.LastEditTime = DateTime.Parse(dateStr, formatProvider); break; } } catch (Exception ex) { throw new ApplicationException(string.Format("获取文件修改时间出错[{0}]", fileName), ex); } } string _dir = m.Groups["dir"].Value; if (_dir != "" && _dir != "-") { result.FileInfoType = DirectoryEntryTypes.目录; } else { result.FileInfoType = DirectoryEntryTypes.文件; } return(result); }