Feedback

C# - Datei/Ordner durch Erweiterungsmethoden abfragen

Veröffentlicht von am 7/4/2008
(2 Bewertungen)
Erweiterungsmethoden (C# 3.0) die es erlauben Datei und Ordneroptionen über den Pfad (string) abzufragen.

Das Erstellen von FileInfo oder DirectoryInfo Objekten fällt somit weg.
using System;
using System.Collections.Generic;

namespace AdString.IO
{
    using System.IO;

    public static class IOExtensions
    {

        public enum IOType { File, Directory, DontExist };

        /// <summary>
        /// Gibt die Endung einer Datei zurück
        /// </summary>
        /// <param name="__path">Pfad der Datei</param>
        /// <returns>Endung ohne Punkt</returns>
        public static string _Extenstion(this String __path)
        {
            if (File.Exists(__path))
                return new FileInfo(__path).Extension.Substring(1);

            else
                throw new FileNotFoundException("Datei existiert nicht.");

        }


        /// <summary>
        /// Gibt die Dateigröße zurück
        /// </summary>
        /// <param name="__path">Pfad der Datei</param>
        /// <returns>Dateigröße</returns>
        public static long _FileSize(this String __path)
        {
            if(File.Exists(__path))
                return new FileInfo(__path).Length;


            else
                throw new FileNotFoundException("Datei existiert nicht.");
        }


        /// <summary>
        /// Gibt die Ordnergröße zurück
        /// </summary>
        /// <param name="__path">Pfad zum Ordner</param>
        /// <returns>Ordnergröße</returns>
        public static long _FolderSize(this String __path)
        {
            return __path._FolderSize(false);
        }


        /// <summary>
        /// Gibt die Ordnergröße zurück
        /// </summary>
        /// <param name="__path">Pfad zum Ordner</param>
        /// <param name="__recursiv">Unterordner auch dazu zählen</param>
        /// <returns>Ordnergröße</returns>
        public static long _FolderSize(this String __path, bool __recursiv)
        {
            if (Directory.Exists(__path))
            {
                if (__recursiv)
                    return FolderSize(new DirectoryInfo(__path));

                else
                {
                    long retValue = 0;

                    foreach (FileInfo fi in new DirectoryInfo(__path).GetFiles())
                        retValue += fi.Length;

                    return retValue;
                }
            }
            else
                throw new DirectoryNotFoundException("Ordner existiert nicht.");
        }


        /// <summary>
        /// Erzeigt aus einem Pfad ein FileInfo
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>FileInfo</returns>
        public static FileInfo _ConvertToFileInfo(this String __path)
        {
            if (File.Exists(__path))
                return new FileInfo(__path);

            else
                throw new FileNotFoundException("Datei existiert nicht.");
        }


        /// <summary>
        /// Erzeugt aus einem Pfad ein DirectoryInfo
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>DirectoryInfo</returns>
        public static DirectoryInfo _ConvertToDirectoryInfo(this String __path)
        {
            if (Directory.Exists(__path))
                return new DirectoryInfo(__path);

            else
                throw new DirectoryNotFoundException("Ordner existiert nicht.");
        }


        /// <summary>
        /// Ermittelt ob der Pfad zu eine Datei oder zu einem Ordner zeigt
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>Datei/Ordner/Datei existiert nicht</returns>
        public static IOType _Type(this String __path)
        {
            if (File.Exists(__path))
                return IOType.File;

            else if (Directory.Exists(__path))
                return IOType.Directory;

            return IOType.DontExist;   
        }


        /// <summary>
        /// Letzter Schreibzugriff auf den Pfad
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>Zeit</returns>
        public static DateTime _LastWriteTime(this String __path)
        {
            if (File.Exists(__path))
                return new FileInfo(__path).LastWriteTime;

            else if (Directory.Exists(__path))
                return new DirectoryInfo(__path).LastWriteTime;

            else
                throw new IOException("Kein Ziel zu diesem Pfad Vorhanden");
        }


        /// <summary>
        /// Letzter Lesezugriff auf den Pfad
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>Zeit</returns>
        public static DateTime _LastAccessTime(this String __path)
        {
            if (File.Exists(__path))
                return new FileInfo(__path).LastAccessTime;

            else if (Directory.Exists(__path))
                return new DirectoryInfo(__path).LastAccessTime;

            else
                throw new IOException("Kein Ziel zu diesem Pfad Vorhanden");
        }


        /// <summary>
        /// Zeit an dem die Datei/der Ordner erstellt wurde
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>Zeit</returns>
        public static DateTime _CreationTime(this String __path)
        {
            if (File.Exists(__path))
                return new FileInfo(__path).CreationTime;

            else if (Directory.Exists(__path))
                return new DirectoryInfo(__path).CreationTime;

            else
                throw new IOException("Kein Ziel zu diesem Pfad Vorhanden");
        }


        /// <summary>
        /// Gibt den Übergeordneten Ordner an
        /// </summary>
        /// <param name="__path">Pfad</param>
        /// <returns>Übergeordneter Ordner</returns>
        public static string _Directory(this String __path)
        {
            if (File.Exists(__path))
                return new FileInfo(__path).DirectoryName;

            else if (Directory.Exists(__path))
                return new DirectoryInfo(__path).Parent.Name;

            else
                throw new IOException("Kein Ziel zu diesem Pfad Vorhanden");
        }


        /// <summary>
        /// Liste mit untergeordneten Dateien
        /// </summary>
        /// <param name="__pfad">Pfad des Ordners</param>
        /// <returns>Liste</returns>
        public static List<string> _ListFiles(this String __path)
        {
            List<string> retValue = new List<string>();

            if (!Directory.Exists(__path))
                throw new DirectoryNotFoundException("Ordner existiert nicht.");

            foreach (FileInfo fi in new DirectoryInfo(__path).GetFiles())
                retValue.Add(fi.FullName);

            return retValue;
        }


        /// <summary>
        /// Liste mit untergeordneten Ordner
        /// </summary>
        /// <param name="__pfad">Pfad des Ordners</param>
        /// <returns>Liste</returns>
        public static List<string> _ListDirectories(this String __path)
        {
            List<string> retValue = new List<string>();

            if (!Directory.Exists(__path))
                throw new DirectoryNotFoundException("Ordner existiert nicht.");

            foreach (DirectoryInfo di in new DirectoryInfo(__path).GetDirectories())
                retValue.Add(di.FullName);

            return retValue;
        }


        #region Hilfmethoden

        /// <summary>
        /// Ermittelt die Ordnergröße samt Unterordner
        /// </summary>
        /// <param name="__di">Ordner</param>
        /// <returns>Größe</returns>
        private static long FolderSize(DirectoryInfo __di)
        {
            long retValue = 0;

            foreach (DirectoryInfo di in __di.GetDirectories())
                retValue += FolderSize(di);

            foreach (FileInfo fi in __di.GetFiles())
                retValue += fi.Length;

            return retValue;
        }
        #endregion
    }
}

1 Kommentare zum Snippet

Peter Bucher schrieb am 8/2/2009:
Hallo Flachzange

Ich halte die ganze Geschichte für unnötig und verwirrend.
Es ist unnatürlich (Das merkst du ja selber an deinem Präfix "_") Strings zu zu behandeln, als ob darunter ein Information liegt, die mit dem Dateisystem zu tun hat.

Nicht nur das ich das bei allen Strings habe, sondern auch die leicht amokartige Implementierung wie bspw. per Try & Error herauszufinden, ob der Pfad zu einem Ordner oder einer Datei passt, schockiert mich.

Solche Informationen _weisst_ du doch, bzw. müsstest du wissen, bevor du irgend etwas scheibst.
Ich halte das insofern nicht für eine Erleichtung, sondern für eine Verwirrung.


Gruss Peter
 

Logge dich ein, um hier zu kommentieren!