Verzeichnisstatistik

Library Kata „Verzeichnisstatistik“

Entwickle eine Bibliothek, mit der man den Umfang von Verzeichnisbäumen ermitteln kann.

Die Bibliothek soll einen Verzeichnisbaum durchlaufen und für jedes Verzeichnis Folgendes feststellen:

  • Wieviele Dateien sind im Verzeichnis und allen Unterverzeichnissen enthalten?
  • Wieviele Bytes umfassen die Dateien im Verzeichnis und allen Unterverzeichnissen?
  • Wieviele Ebenen an Unterverzeichnissen gibt es im Verzeichnis?

Verzeichnisse auf Ebene n kummulieren also diese Werte für ihre Unterverzeichnisse auf Ebene n+1.

Kontrakt der Bibliothek:

interface IFolderStats {
	void Connect(string rootpath);

	void Start();
	void Stop();

	void Pause();
	void Resume();

	IEnumerable<IFolder> Folders {get;};
	string RootPath {get;};
	Statuses Status {get;};

	event Action<IFolder> Progress;
}

interface IFolder {
	string Path;
	long NumberOfFiles;
	long TotalBytes;
	int Depth;
}

enum Statuses {
	Waiting, // not connected yet
	Connected,
	Running,
	Paused,
	Finished
}

Die Datensammlung erfolgt im Hintergrund nach Aufruf von Start(). Sie kann jederzeit abgebrochen oder unterbrochen und wieder aufgenommen werden.

Folders liefert den jeweils aktuellen Stand der Datensammlung. Und Progress wird für jedes Verzeichnis gefeuert – allerdings enthalten NumberOfFiles etc. nicht die Daten zu dem Verzeichnis, sondern die kummulierten Werte aller bisher besuchten Verzeichnisse.