-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathMsFileInfo.cs
More file actions
51 lines (49 loc) · 2.08 KB
/
Copy pathMsFileInfo.cs
File metadata and controls
51 lines (49 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Net;
namespace LoxStatEdit
{
public class MsFileInfo
{
public string FileName { get; private set; }
public DateTime Date { get; private set; }
public int Size { get; private set; }
public static IList<MsFileInfo> Load(Uri uri)
{
var list = new List<MsFileInfo>();
var ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(uri);
ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;
using(var response = ftpWebRequest.GetResponse())
using(var ftpStream = response.GetResponseStream())
using(var streamReader = new StreamReader(ftpStream))
while(!streamReader.EndOfStream)
{
//Hacky but works fair enough in our particular use case (I hope...)
var line = streamReader.ReadLine();
int datePos = line.IndexOf(' ', 24);
int size;
if(!int.TryParse(line.Substring(18, datePos - 18), out size))
size = -1;
datePos++;
int fileNamePos;
DateTime dateTime;
if(DateTime.TryParseExact(line.Substring(datePos, 12), "MMM dd HH:mm",
CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
fileNamePos = datePos + 13;
else if(DateTime.TryParseExact(line.Substring(datePos, 11), "MMM dd yyyy",
CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
fileNamePos = datePos + 12;
else fileNamePos = line.LastIndexOf(' ') + 1;
list.Add(new MsFileInfo
{
FileName = line.Substring(fileNamePos),
Date = dateTime,
Size = size,
});
}
return list;
}
}
}