[C#] Unterordner erstellen

08/07/2013 13:13 lolxdflyx3#1
Hi,
ich arbeitet zur Zeit an einem Patcher.
...Um erlich zu sein ist der Patcher aus einem TuT von YT.
Quote:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Alles funktioniert, bis auf das erstellen von Unterordern. Anstatt
Quote:
Content/Models
erstellt er einen Ordner Namens:
Quote:
ContentModels
Ich muss irgendwo einen Fehler, beim erstellen von Unterordnern habe. Ich such jetzt schon 2 Tage lang nach dem Fehler, aber ich finde ihn nicht :(.
Bitte helft mir... :handsdown:
Hier meine Patchlist:
...und hier meine Form1.cs des Patchers:
EDIT: Code gekürtzt
08/08/2013 12:17 stotterer09#2
wie wärs mit ein paar codesnippets so wird dir hier ned geholfen
keiner Arbeitet sich gerne durh ein ganzen code durch poste einfach nur den abschnitt der wichtig is
08/08/2013 12:48 Tasiro#3
Quote:
Originally Posted by stotterer09 View Post
wie wärs mit ein paar codesnippets so wird dir hier ned geholfen
keiner Arbeitet sich gerne durh ein ganzen code durch poste einfach nur den abschnitt der wichtig is
Das sehe ich ganz genauso, kaum jemand würde sich hunderte Zeilen unkommentierten Code durchlesen, welcher einen noch nicht einmal persönlich interessiert.
Bitte erstelle ein Minimalbeispiel: streich so lange etwas von dem Code, bis das Problem noch immer besteht, aber sonst nichts mehr entfernt werden kann (du kannst auch Dummywerte einsetzen). Dazu gehört auch, die Eingabedatei zu kürzen, wenn ein Eintrag darin reicht. Dann solltest du nur noch ein paar Dutzend Code-Zeilen haben. Das liest man sich schon eher durch.

Aber dein Problem scheint mir aber eigentlich wie geschaffen für einen Debugger, einfach ein paar Haltepunkte setzen und dann sehen, was passiert und warum.
08/10/2013 20:16 Sedrika#4
Ich hab hier mal auf die schnelle eine Funktion geschrieben. Sie sollte das machen, was du willst.

Code:
	public static void CreateDirectoryEx(string folder)
	{
		if (!folder.Contains("\\"))
			return;
		string[] nfolder = folder.Split("\\");
		string str = null;
		for (int i = 0; i < nfolder.Length - 1; i++)
		{
			str += nfolder[i] + "\\";
			if (!Directory.Exists(str))
				Directory.CreateDirectory(str);
		}
	}
08/11/2013 14:42 -PinkiWinki-#5
Pfade erstellt man mit Path.Combine und nicht mit + "\\". Außerdem erstellt Directory.CreateDirectory schon alle nicht vorhandene Ordner im Pfad, deine Schleife da oben ist also total sinnlos.
08/11/2013 15:06 MrSm!th#6
Code:
	public static void CreateDirectoryEx(string folder)
	{
		if (!folder.Contains("\\"))
			return;
Und wenn ich gerne einen Pfad im Anwendungsverzeichnis erstellen will, sprich im Grunde nur CreateDirectoryEx("MyFolder"); aufrufen wollen würde? Soll ich dann extra eine andere Funktion nutzen, weil deine damit nicht klarkommt? Wenn ich die Auswahl dem User überlasse, darf ich also immer zwischen deiner und der Alternativfunktion unterscheiden?
Sorry, aber die Funktion sollte schon flexibel genug sein, auch all das machen zu können, was CreateDirectory kann, sonst ist das Suffix Ex nicht gerechtfertigt.
Code:
		string[] nfolder = folder.Split("\\");
		string str = null;
		for (int i = 0; i < nfolder.Length - 1; i++)
		{
			str += nfolder[i] + "\\";
			if (!Directory.Exists(str))
				Directory.CreateDirectory(str);
		}
	}
Warum initialisierst du str mit null und nicht mit ""? Ich bin nicht sicher, aber der Operator += sollte da eine Exception werfen, weil str null ist.
Bei deiner Funktion ist auch anzumerken, dass sie nicht funktioniert, wenn der Pfad nicht mit einem "\" beendet wird (was auch o.g. Aspekt verhindern würde, selbst wenn deine if-Abfrage dort nicht wäre), weil dann deine Schleife einmal zu wenig durchläuft. CreateDirectory verlangt das nicht und man sollte sich da an die gleichen Vorgaben halten.

Ungeachtet der Tatsache, dass Pinki diese Art von Funktion bereits als unnötig klassifiziert hat, hier einmal eine semantisch korrekte:

Code:
public static void CreateDirectoryEx(string folder)
	{
		string[] nfolder = folder.Split("\\");
		string str = "";
		for (int i = 0; i < nfolder.Length; i++)
		{
			str += nfolder[i] + "\\";
			if (!Directory.Exists(str))
				Directory.CreateDirectory(str);
		}
	}
Und damit hat man dann ohnehin die Funktionalität von CreateDirectory.