Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }