Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Using ListDirectoryDetails
Message
From
18/04/2010 06:05:14
 
 
To
18/04/2010 02:33:12
General information
Forum:
ASP.NET
Category:
Other
Environment versions
Environment:
VB 9.0
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01460672
Message ID:
01460791
Views:
40
>>I think it was
>>
>>Do you have an example of the other format ?
>
>This is an example:
>
>
>drw-rw-rw-   1 user     group           0 Apr 15 14:36 .
>drw-rw-rw-   1 user     group           0 Apr 15 14:36 ..
>-rw-rw-rw-   1 user     group       66710 Apr  7 01:14 00000014.jpg
>-rw-rw-rw-   1 user     group       65566 Apr  7 01:14 00000015.jpg
>-rw-rw-rw-   1 user     group       59998 Apr  7 01:14 00000016.jpg
>-rw-rw-rw-   1 user     group       59591 Apr  7 01:14 00000017.jpg
>-rw-rw-rw-   1 user     group       76124 Apr  7 01:14 00000018.jpg
>-rw-rw-rw-   1 user     group       56467 Apr  7 01:14 00000019.jpg
>-rw-rw-rw-   1 user     group       71404 Apr  7 01:15 00000020.jpg
>-rw-rw-rw-   1 user     group       61161 Apr  7 01:15 00000021.jpg
>-rw-rw-rw-   1 user     group       66224 Apr  7 01:15 00000022.jpg
>-rw-rw-rw-   1 user     group       66710 Apr 15 14:37 00000024.jpg
>


I just tested with this format - no difference - it works as well

This is the output
True 15/04/2010 14:36:00 0 .
True 15/04/2010 14:36:00 0 ..
False 07/04/2010 01:14:00 66710 00000014.jpg
False 07/04/2010 01:14:00 65566 00000015.jpg
False 07/04/2010 01:14:00 59998 00000016.jpg
False 07/04/2010 01:14:00 59591 00000017.jpg
False 07/04/2010 01:14:00 76124 00000018.jpg
False 07/04/2010 01:14:00 56467 00000019.jpg
False 07/04/2010 01:15:00 71404 00000020.jpg
False 07/04/2010 01:15:00 61161 00000021.jpg
False 07/04/2010 01:15:00 66224 00000022.jpg
False 15/04/2010 14:37:00 66710 00000024.jpg
#define FORMAT2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//using GregoryAdam.Base.Debugging;
//using GregoryAdam.Base.Text.RegEx;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Diagnostics;


namespace BaseTest
{
	//______________________________________________________________________
	class Program
	{
		static string Site = @"ftp://ftp.prolib.de/Public";
		static string UserId = "anonymous";
		static string Passwd = "password";

		public static void Main()
		{
			var ftp = new FtpTest(Site, UserId, Passwd);
#if !FORMAT2

			var files = ftp.GetDirectoryListing("");
#else
			var files = ftp.GetFormat2();
#endif
			foreach (var f in files)
			{
				Console.WriteLine(
						"{0} {1} {2} {3}",
						f.IsDirectory,
						f.FileTime,
						f.FileSize,
						f.FileName);
			}

			Console.ReadLine();
		}

	}
	//______________________________________________________________________
	public class FtpTest
	{
		string Site;
		NetworkCredential Credentials ;

		static string LinePattern = 
		@"^(?<IsFolder>\S)(?<Permissions>\S{9})\s+(?<Links>\d+)\s+(?<User>\S+)\s+(?<Group>\S+)\s+(?<FileSize>\d+)\s+((?<DateTimeCurrentYear>(?<Month>\S{3})\s+(?<Day>\d{1,2})\s+(?<Time>\d\d:\d\d))|(?<DateTimeYear>(?<Month>\S{3})\s+(?<Day>\d{1,2})\s+(?<Year>\d{4})))\s+(?<FileName>\S+)$";

		//______________________________________________________________________
		public FtpTest(string site, string userId, string passwd)
		{
			Site = site;
			Credentials = new NetworkCredential(userId, passwd);

		}
		//______________________________________________________________________
		public List<FtpFileInfo> GetDirectoryListing(string path )
		{
			var request = (FtpWebRequest)WebRequest.Create(Site + "/" + path );
			request.Credentials = Credentials;

			request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

			var response = (FtpWebResponse)request.GetResponse();

			List<FtpFileInfo> list;

			using (var stream = new StreamReader(response.GetResponseStream()))
			{
				list = Parse(stream);				
			}

			return list;
		}

		//______________________________________________________________________
		private List<FtpFileInfo> Parse(StreamReader stream)
		{
			var list = new List<FtpFileInfo>();

			while (!stream.EndOfStream)
			{

				string line = stream.ReadLine();
				Match match = Regex.Match(line, LinePattern);

				if (match.Success)
				{
					bool isFolder = match.Groups["IsFolder"].Value == "d";

					string fileName = match.Groups["FileName"].Value;
					ulong fileSize = Convert.ToUInt64(match.Groups["FileSize"].Value);
					DateTime dateTime;

					if (String.IsNullOrEmpty(match.Groups["DateTimeCurrentYear"].Value))
					{
						// Month, Day, Year
						dateTime = Convert.ToDateTime(match.Groups["DateTimeYear"].Value);
					}
					else
					{
						// Month, Day, Time

						dateTime = Convert.ToDateTime(
							String.Format(
								"{0} {1} {2:D4} {3}",
								match.Groups["Month"].Value,
								match.Groups["Day"].Value,
								DateTime.Now.Year,
								match.Groups["Time"].Value
								)
							);
						if (dateTime > DateTime.Now)
							dateTime = dateTime.AddYears(-1);
					}

					list.Add(new FtpFileInfo(isFolder, fileName, dateTime, fileSize));
				}
				else
				{
					Debug.Assert(false, "cannot parse", line);
				}

			}
			return list;
		}
		//______________________________________________________________________
		public List<FtpFileInfo> GetFormat2()
		{
			string format2 =
@"drw-rw-rw-   1 user     group           0 Apr 15 14:36 .
drw-rw-rw-   1 user     group           0 Apr 15 14:36 ..
-rw-rw-rw-   1 user     group       66710 Apr  7 01:14 00000014.jpg
-rw-rw-rw-   1 user     group       65566 Apr  7 01:14 00000015.jpg
-rw-rw-rw-   1 user     group       59998 Apr  7 01:14 00000016.jpg
-rw-rw-rw-   1 user     group       59591 Apr  7 01:14 00000017.jpg
-rw-rw-rw-   1 user     group       76124 Apr  7 01:14 00000018.jpg
-rw-rw-rw-   1 user     group       56467 Apr  7 01:14 00000019.jpg
-rw-rw-rw-   1 user     group       71404 Apr  7 01:15 00000020.jpg
-rw-rw-rw-   1 user     group       61161 Apr  7 01:15 00000021.jpg
-rw-rw-rw-   1 user     group       66224 Apr  7 01:15 00000022.jpg
-rw-rw-rw-   1 user     group       66710 Apr 15 14:37 00000024.jpg";
			var memStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(format2));


			List<FtpFileInfo> list;

			using (var str = new StreamReader(memStream))
			{
				list = Parse(str);
			}
			return list;
		
		}
		//______________________________________________________________________
	}

	public class FtpFileInfo
	{
		public readonly bool IsDirectory;
		public readonly string FileName;
		public readonly DateTime FileTime;
		public readonly ulong FileSize;
		//______________________________________________________________________
		public FtpFileInfo(bool isDirectory, string fileName, DateTime fileTime, ulong fileSize)
		{
			IsDirectory = isDirectory;
			FileName = fileName;
			FileTime = fileTime;
			FileSize = fileSize;
		}
		//______________________________________________________________________
	}
}
Gregory
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform