Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Proper format to read FTP directory
Message
From
10/05/2012 02:45:19
 
 
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:
01543389
Views:
51
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.

Gregory's regex is good. Or use string.Split(). Something like:
Imports System.Collections.Generic
Imports System.Linq

Namespace ConsoleApplication5
	Class Program
		Private Shared Sub Main(args As String())
			Dim typeA As New List(Of String)() From { _
				" 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" _
			}

			Dim result As IEnumerable(Of FTPInfo) = typeA.[Select](Function(x) 
			Dim line As String() = DirectCast(x, String).Split(DirectCast(Nothing, Char()), StringSplitOptions.RemoveEmptyEntries)
			Return New FTPInfo() With { _
				Key .File = line(8), _
				Key .Size = line(4), _
				Key .Month = line(5), _
				Key .Day = line(6), _
				Key .YearOrTime = line(7) _
			}

End Function)
		End Sub
	End Class
	Public Structure FTPInfo
		Public File As String
		Public Size As String
		Public Month As String
		Public Day As String
		Public YearOrTime As String
	End Structure
End Namespace
Disclaimer: VB auto-converted from C#.....
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform