예제 #1
0
        /// <summary>
        /// Запрос возвращает информацию о папке dir и всех папках и файлах в нем
        /// </summary>
        /// <param name="dir">Папка</param>
        /// <param name="getRoot"></param>
        /// <returns>Список файлов и папок в папке dir или null если произошла ошибка</returns>
        public List <DirInfo> GetDirectories(string dir, bool getRoot = false)
        {
            var request = createRequest(dir);

            request.Headers.Add("Depth", "1");
            request.Method = "PROPFIND";
            try
            {
                //WebProxy proxy = new WebProxy();
                //proxy.Address = new Uri("http://127.0.0.1:8888");
                //request.Proxy = proxy;
                var resp = (HttpWebResponse)request.GetResponse();
                using (var responseStream = resp.GetResponseStream())
                {
                    var sr    = new StreamReader(responseStream);
                    var cont  = sr.ReadToEnd();
                    var dinfo = new List <DirInfo>();
                    while (true)
                    {
                        var posBeg = cont.IndexOf("<d:response>", StringComparison.InvariantCultureIgnoreCase);
                        var posEnd = cont.IndexOf("</d:response>", StringComparison.InvariantCultureIgnoreCase);
                        if (posBeg < 0)
                        {
                            break;
                        }

                        try
                        {
                            dinfo.Add(DirInfo.Parse(cont.Substring(posBeg, posEnd - posBeg), server));
                        }
                        catch {}

                        cont = cont.Substring(posEnd + 1);
                    }

                    if (!getRoot && dinfo.Count > 0)
                    {
                        dinfo.RemoveAt(0);
                    }

                    return(dinfo);
                }
            }
            catch (Exception ex)
            {
                if (ThrowErrors)
                {
                    throw;
                }

                lastError = ex.Message;
                return(null);
            }
        }
예제 #2
0
        /// <summary>
        /// Запрос возвращает информацию о папке dir и всех папках и файлах в нем
        /// </summary>
        /// <param name="dir">Папка</param>
        /// <returns>Список файлов и папок в папке dir или null если произошла ошибка</returns>
        public DirInfo GetInfo(string dir)
        {
            var request = createRequest(dir);

            request.Headers.Add("Depth", "1");
            request.Method = "PROPFIND";

            try
            {
                var resp = (HttpWebResponse)request.GetResponse();
                using (var responseStream = resp.GetResponseStream())
                {
                    var sr    = new StreamReader(responseStream);
                    var cont  = sr.ReadToEnd();
                    var dinfo = new List <DirInfo>();

                    while (true)
                    {
                        var posBeg = cont.IndexOf("<d:response>", StringComparison.InvariantCultureIgnoreCase);
                        var posEnd = cont.IndexOf("</d:response>", StringComparison.InvariantCultureIgnoreCase);
                        if (posBeg < 0)
                        {
                            break;
                        }

                        try
                        {
                            dinfo.Add(DirInfo.Parse(cont.Substring(posBeg, posEnd - posBeg), server));
                        }
                        catch { }

                        cont = cont.Substring(posEnd + 1);
                    }

                    return(dinfo != null && dinfo.Count > 0 ? dinfo[0] : null);
                }
            }
            catch (Exception ex)
            {
                if (ThrowErrors)
                {
                    throw;
                }

                lastError = ex.Message;
                return(null);
            }
        }
예제 #3
0
        public static DirInfo Parse(string xml, string server)
        {
            var rez = new DirInfo
            {
                CreationDate  = getData(xml, "creationdate"),
                DisplayName   = getData(xml, "displayname"),
                ContentLenght = Convert.ToInt32(getData(xml, "getcontentlength")),
                LastModified  = getData(xml, "getlastmodified"),
                FullPath      = HttpUtility.UrlDecode(getData(xml, "href")),
                IsDirectory   = getData(xml, "isCollection") == "1",
            };

            rez.Server  = server;
            rez.RelPath = rez.FullPath.Replace(server, "");

            var dt = DateTime.Parse(rez.LastModified);//.Subtract(new TimeSpan(4, 0, 0));

            rez.LastModified = dt.ToLongDateString().Replace(" г.", "") + " " + dt.ToLongTimeString();
            dt = DateTime.Parse(rez.CreationDate);//.Subtract(new TimeSpan(4, 0, 0));
            rez.CreationDate = dt.ToLongDateString().Replace(" г.", "") + " " + dt.ToLongTimeString();
            return(rez);
        }