Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Proper format to read FTP directory
Message
From
09/05/2012 13:33:08
 
 
To
09/05/2012 13:12:31
General information
Forum:
ASP.NET
Category:
Other
Environment versions
Environment:
VB 9.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01543372
Message ID:
01543374
Views:
55
This message has been marked as a message which has helped to the initial question of the thread.
>In my FTP class, I have two formats to read FTP directory content. Here are the two scenarios:
>
>
>                    ' This is the standard
>                    ' total 4696
>                    ' drw-rw-rw-   1 user     group           0 Feb  6 15:46 .
>                    ' drw-rw-rw-   1 user     group           0 Feb  6 15:46 ..
>                    ' -rw-rw-rw-   1 user     group        4825 May  3  2010 Account.png
>                    ' -rw-rw-rw-   1 user     group        5242 May  3  2010 Administration.png
>                    ' -rw-rw-rw-   1 user     group        4117 Apr 17  2011 Agent.png
>                    ' -rw-rw-rw-   1 user     group        1402 Dec 30  2005 AmazonCA.gif
>                    ' -rw-rw-r--   1 wliclus  weblogic   308121 Jun  1  2011 tlv_01_jackk_2011615315_1185655_001_23327701.zip
>
>                    ' This is also another format we have to support
>                    ' -r-xr-xr-x   1 owner    group        78145990 Nov  4  2011 101.zip
>                    ' -r-xr-xr-x   1 owner    group           35492 Apr 14  2011 20110414.40E
>                    ' -r-xr-xr-x   1 owner    group           33583 Apr 14  2011 20110414.421
>                    ' -r-xr-xr-x   1 owner    group           40815 Apr 14  2011 20110414.483
>                    ' -r-xr-xr-x   1 owner    group           24836 Apr 14  2011 20110414.ARC
>                    ' -r-xr-xr-x   1 owner    group            4737 May  5  2011 4A16PBE1.txt
>                    ' -r-xr-xr-x   1 owner    group            4737 Jan 18 13:50 4A17A7B1.txt
>
>
>The first one is the one that is commonly used. On one specific server, I am receiving the directly listing in the second scenario.
>
>So far, I have this code which parse the following component:
>
>
>                    ' If this is a file
>                    If lcLine.StartsWith("-") Then
>
>                        ' Get the character at position 42
>                        lcCharacter = Mid(lcLine, 42, 1)
>
>                        ' If this is a space
>                        If lcCharacter = " " Then
>                            lcFile = Mid(lcLine, 56)
>                            lnSize = Val(Mid(lcLine, 34, 8))
>                            lcDate = Mid(lcLine, 43, 12)
>                        Else
>                            lcFile = Mid(lcLine, 60)
>                            lnSize = Val(Mid(lcLine, 34, 14))
>                            lcDate = Mid(lcLine, 47, 12)
>                        End If
>
>
>So, I need to know if taking the file size from character 34 will always be good. This assume scenario #1. It takes the next 8 digits. As the second scenario starts reading the file size from character 34 but takes the next 14 digits.
>
>Scenario #1 would then allow to pick list file size up to 99,999,999 bytes, thus 99.999999 MB.
>
>This is based on the assumption that the directly listing returned by FTP servers always include a space between each component. Can someone confirms me if this is correct?
>
>Also, I would like to get the feedback on scenario #2 as to know if starting at character 34 would do as well or if that type of directly listing has been adjusted to support longer group which would then mean I would need to start reading the file size at character 38 instead of character 34 for this scenario.
>
>Any feedback on this issue would be appreciated.

Think I have posted this before. I'd use regex, do not count the positions. If the user name/group gets longer, you may have a problem
	static void Main(string[] args)
		{
			string[] lines =
			{	@"drw-rw-rw-   1 user     group           0 Feb  6 15:46 .",
                @"drw-rw-rw-   1 user     group           0 Feb  6 15:46 ..",
                @"-rw-rw-rw-   1 user     group        4825 May  3  2010 Account.png",
                @"-rw-rw-rw-   1 user     group        5242 May  3  2010 Administration.png",
                @"-rw-rw-rw-   1 user     group        4117 Apr 17  2011 Agent.png",
                @"-rw-rw-rw-   1 user     group        1402 Dec 30  2005 AmazonCA.gif",
                @"-rw-rw-r--   1 wliclus  weblogic   308121 Jun  1  2011 tlv_01_jackk_2011615315_1185655_001_23327701.zip",
				@"-r-xr-xr-x   1 owner    group        78145990 Nov  4  2011 101.zip",
                @"-r-xr-xr-x   1 owner    group           35492 Apr 14  2011 20110414.40E",
                @"-r-xr-xr-x   1 owner    group           33583 Apr 14  2011 20110414.421",
                @"-r-xr-xr-x   1 owner    group           40815 Apr 14  2011 20110414.483",
                @"-r-xr-xr-x   1 owner    group           24836 Apr 14  2011 20110414.ARC",
                @"-r-xr-xr-x   1 owner    group            4737 May  5  2011 4A16PBE1.txt",
                @"-r-xr-xr-x   1 owner    group            4737 Jan 18 13:50 4A17A7B1.txt"
			};

			string pattern = @"^(?<Permissions>\S+)\s+(?<Links>\d+)\s+(?<User>\w+)\s+(?<Group>\w+)\s+(?<FileSize>\d+)\s+(?<Month>\w+)\s+(?<Day>\d+)\s+((?<Year>\d{4})|(?<Time>\d+:\d+(:\d+)?))\s+(?<FileName>\S+)$";



			foreach (string line in lines)
			{
				Match m = Regex.Match(line, pattern);

				if (m.Success)
				{
					Console.WriteLine("Month {0}", m.Groups["Month"]);
					Console.WriteLine("Day {0}", m.Groups["Day"]);
					Console.WriteLine("Year {0}", m.Groups["Year"]);
					Console.WriteLine("Time {0}", m.Groups["Time"]);
					Console.WriteLine("Size {0}", m.Groups["FileSize"]);
					Console.WriteLine("FileName {0}", m.Groups["FileName"]);
				}
				else
					Console.WriteLine("No match");

			}


			Console.ReadLine();
			return;		

		}
Gregory
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform