Laden...

[erledigt] Liste aller Dateien und Ordner mittels WebRequest von einem FTP-Server abrufen

Erstellt von Repac3r vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.350 Views
R
Repac3r Themenstarter:in
57 Beiträge seit 2014
vor 9 Jahren
[erledigt] Liste aller Dateien und Ordner mittels WebRequest von einem FTP-Server abrufen

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.

1.696 Beiträge seit 2006
vor 9 Jahren

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.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

R
Repac3r Themenstarter:in
57 Beiträge seit 2014
vor 9 Jahren

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;
        }