Schöen Mittag euch,
für ein Webinterface benötige ich einen Service mit diesem es möglich ist, durch einen FTP-Server zu navigieren. Dies stellt ansich kein Problem dar. Doch wie kann ich unterscheiden, ob es sich um eine Datei oder einen Ordner handelt?
public IEnumerable<string> GetAllFiles(FtpConnectionEntity settings)
{
var request = (FtpWebRequest) WebRequest.Create(settings.FileUri);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
if (!string.IsNullOrEmpty(settings.Username))
{
request.Credentials = new NetworkCredential(settings.Username, settings.Password);
}
using (var response = (FtpWebResponse)request.GetResponse())
{
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
return streamReader.ReadToEnd().Split(new [] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
}
}
}
Hiermit bekomme ich alle Ordner und Dateien aufgelistet schön und gut, doch was ist jetzt was? Es kann ja vorkommen, dass Ordner einen Punkt beinhalten und somit als Datei behandelt werden, sobald ich auf eine Extensions überprüfe.
Wäre nett, wenn mir jemand mal kurz einen Denkanstoß geben könnte 😉
//Edit: Eine Möglichkeit wäre, die Dateigröße abzufragen, kommt es zu einer Exception handelt es sich um einen Ordner. Dies finde ich aber sehr unsauber und möchte ich eher nicht in meinem Code stehe haben.
Directory-Einträge fangen mit d an 😉, z.B.
drw-rw-rw- ...
Wenn du z.B. durch die lines steppst und if (line.StartsWith("d")) abfragst, kannst du die Directories heraus filtern.
**:::
Directory-Einträge fangen mit d an 😉, z.B.
drw-rw-rw- ...
Wenn du z.B. durch die lines steppst und if (line.StartsWith("d")) abfragst, kannst du die Directories heraus filtern.
Danke, ist mir vorhin auch aufgefallen. Hier mal der Code, funktioniert für mich soweit:
/// <summary>
/// Parsing a chmod based string into a <see cref="FtpFileItemEntity"/>
/// </summary>
/// <param name="line">Line to parse</param>
/// <returns>Returns a <see cref="FtpFileItemEntity"/></returns>
private FtpFileItemEntity ParseChmodString(string line)
{
var result = new FtpFileItemEntity();
var items = line.Split(new [] {" "}, StringSplitOptions.RemoveEmptyEntries);
//Based on this string: "drwxr-xr-x 1 ftp ftp 0 Apr 13 13:02 testFolder"
//The first character says, that the item is a file or a directory.
//If the first character is "d" it is a directory, in case of the character "-" it is a file.
result.IsFile = !items[0].StartsWith("d");
long size;
//The third item contains the file size
if (long.TryParse(items[4], out size))
{
result.Filesize = size;
}
//The eighth item contains the name of the specfic file
result.Filename = items[8];
return result;
}