Autor Beitrag
Jappa
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 18.01.18 14:40 
Hallo zusammen, ich hoffe ich bin im richtigen Forum abteil gelandet :D

Ich arbeite gerade an einem entpacker und habe folgendes problem :D

mein Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
            if (cFile.Contains(@"\"))
            {
                string Folder = cFile.Substring(0, cFile.IndexOf(@"\"));
                if (!Directory.Exists(Folder))
                    Directory.CreateDirectory(Folder);

                string Folder2 = cFile.Replace(Folder + @"\"string.Empty);
                if (Folder2.Contains(@"\"))
                {
                    Folder2 = Folder2.Substring(0, Folder2.IndexOf(@"\"));
                    if (!Directory.Exists(Folder + @"\" + Folder2))
                        Directory.CreateDirectory(Folder + @"\" + Folder2);
                    if (Folder2.Contains(@"\"))
                    {
                        string Folder3 = Folder2.Substring(0, Folder2.IndexOf(@"\"));
                        if (!Directory.Exists(Folder + @"\" + Folder2 + @"\" + Folder3))
                            Directory.CreateDirectory(Folder + @"\" + Folder2 + @"\" + Folder3);
                    }
                }
            }


Wie ist es mir möglich, da weitere ordner hinzuzufügen, ich verzweifel total :D

Mit freundlichen Grüßen,
Jappa

Moderiert von user profile iconTh69: Titel geändert (war "cFile.Substring Problem").


Zuletzt bearbeitet von Jappa am Do 18.01.18 19:23, insgesamt 1-mal bearbeitet
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.01.18 15:38 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Jappa Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 18.01.18 16:42 
Guten Tag, Danke Dir :)


Also, ich habe einen Updater, der sollte bis zu 10 unterordner runterladen und entpacken können, der Dateiaufbau ist wie folgt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
ORDER1
    Datei1.gz
    Datei2.gz
    ORDNER2
        Datei3.gz
        Datei4.gz
        ORDNER3
            Datei5.gz
            Datei6.gz


usw :D

Der oben gepostete Code, läd die dateien aber nur bis zum ORDNER2 runter und entpackt diese auch wunderbar ab ORDNER3 crasht der updater, ich weiß zum verfaulen nicht, wie ich den Code weiter ausbauen kann (mit + Folder4, 5 usw.)

Hoffe es war jetzt etwas verständlicher :D


Gruss

Jappa
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4429
Erhaltene Danke: 906


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 18.01.18 19:06 
Wenn du eine Fehlermeldung bekommst solltest du die uns nennen. Wenn du keine bekommst solltest du über Fehlerlogging nachdenken. Das implementieren und uns dann die Fehlermeldung nennen ;)

Ich gehe mal davon aus das du in deinem Code nicht versuchst hast nach Leerstrings zu suchen? So wie der gezeigte Code das hier anzeigt wäre das Unsinn. Du versuchst nach dem Directory Trennzeichen zu suchen richtig? Wenn ja dann hat der Codeformatter hier im Forum einen Bug und schluckt den (Back)Slash.
Jappa Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 18.01.18 19:21 
Hey Ralf,

Ja hat er :D

es sollte überall, @"\\" sein :D

EDIT:

Hab den Code editiert, mit doppel backslash funktioniert es :)


Also, fehlermeldung bekomme ich Folgende:

"Software funktioniert nicht mehr", die standart absturzmeldung bei windows :D
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4429
Erhaltene Danke: 906


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 18.01.18 20:55 
Mit Fehlermeldung meinte ich die Fehlermeldung(Exception) die im Code auftritt. Da du die offensichtlich nicht hast weise ich nochmal auf Fehlerlogging hin das dir fehlt.

Nebenbei das Problem ist ganz leicht durch Debugging herauszufinden. Falls du dir die Fähigkeit des Debuggen noch nicht angeeignet hast wäre es jetzt die Gelegenheit sich damit vertraut zu machen. Debuggen ist was einfaches aber essentiell wichtig. Wenn du dir das was du beim Debuggen herausfindest nicht weiterhilft dann können wir dir hier sicherlich weiterhelfen.

Und danach kannst du dann den Code entsorgen und es einfach so machen wie Frühlingsrolle schrieb. Denn die Problematik die du mit dem Code lösen willst existiert nicht.
Jappa Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 18.01.18 21:13 
Hallo Ralf,

Ich entschuldige mich, habe ganz vergessen den Debug Log mit an den anderen beitrag zu hängen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
System.IO.DirectoryNotFoundException
  HResult=0x80070003
  Nachricht = Ein Teil des Pfades "F:\xx1\xx2\xx3\xx4\xx5\xx6\xx7\xx8\Datei5.caw.gz" konnte nicht gefunden werden.
  Quelle = mscorlib
  Stapelüberwachung:
   bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   bei System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   bei System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
   bei Patcher.GZip.DecompressFile(String inputPath, String outputPath) in F:\xx\xx\GZip.cs: Zeile12
   bei Patcher.Patcher.Completed(Object sender, AsyncCompletedEventArgs e) in F:\xx\xx\Patcher.cs: Zeile432
   bei System.Net.WebClient.OnDownloadFileCompleted(AsyncCompletedEventArgs e)
   bei System.Net.WebClient.DownloadFileOperationCompleted(Object arg)
   bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
   bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   bei System.Threading.ThreadPoolWorkQueue.Dispatch()
   bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()


Mein Updater läd nur bis zum Ordner (xx6) herunter, alle anderen unterordner die danach kommen, werden nicht mit runtergeladen, daher folgt beim entpacken, der oben genannte fehler, da er anhand einer md5 datei, in der der komplette Pfad zur Datei5.caw.gz steht versucht zu entpacken.

Diese Datei ansich aber logischerweiße nicht findet, da sie ja nicht mit vom Server geladen wurde.

Es muss iwie eine lösung geben, den im ersten beitrag geposteten code zu erweitern, auf Folder4, Folder5 und co, da liegt nämlich das problem drin.


Gruss

Jappa
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Chefentwickler
Beiträge: 20416
Erhaltene Danke: 2233

Win 10
C# (VS 2017)
BeitragVerfasst: Do 18.01.18 21:21 
Der Fehler mit den Baskslashes im Forum sollte behoben sein, das war noch eine Nachwehe der Umstellung auf PHP 7.1. Ich habe den obigen Beitrag wieder angepasst, sodass die einfachen Backslashes drin stehen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: Jappa
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.01.18 13:36 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Jappa Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 19.01.18 20:23 
Hey, Das funktionierte leider auch nicht, habe nun mit ein bisschen logischem denken und rumprobieren ein funktionierendes ergebnis:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
            if (cFile.Contains(@"\"))
            {
                string Folder = cFile.Substring(0, cFile.IndexOf(@"\"));
                if (!Directory.Exists(Folder))
                     Directory.CreateDirectory(Folder);

                string Folder2 = cFile.Replace(Folder + @"\"string.Empty);
                if (Folder2.Contains(@"\"))
                {
                    Folder2 = Folder2.Substring(0, Folder2.IndexOf(@"\"));
                    if (!Directory.Exists(Folder + @"\" + Folder2))
                         Directory.CreateDirectory(Folder + @"\" + Folder2);

                    string Folder3 = cFile.Replace(Folder + @"\" + Folder2 + @"\"string.Empty);
                    if (Folder3.Contains(@"\"))
                    {
                        Folder3 = Folder3.Substring(0, Folder3.IndexOf(@"\"));
                        if (!Directory.Exists(Folder + @"\" + Folder2 + @"\" + Folder3))
                            Directory.CreateDirectory(Folder + @"\" + Folder2 + @"\" + Folder3);

                        string Folder4 = cFile.Replace(Folder + @"\" + Folder2 + @"\" + Folder3 + @"\"string.Empty);
                        if (Folder4.Contains(@"\"))
                        {
                            Folder4 = Folder4.Substring(0, Folder4.IndexOf(@"\"));
                            if (!Directory.Exists(Folder + @"\" + Folder2 + @"\" + Folder3 + @"\" + Folder4))
                                Directory.CreateDirectory(Folder + @"\" + Folder2 + @"\" + Folder3 + @"\" + Folder4);

                            string Folder5 = cFile.Replace(Folder + @"\" + Folder2 + @"\" + Folder3 + @"\" + Folder4 + @"\"string.Empty);
                            if (Folder5.Contains(@"\"))
                            {
                                Folder5 = Folder5.Substring(0, Folder5.IndexOf(@"\"));
                                if (!Directory.Exists(Folder + @"\" + Folder2 + @"\" + Folder3 + @"\" + Folder4 + @"\" + Folder5))
                                    Directory.CreateDirectory(Folder + @"\" + Folder2 + @"\" + Folder3 + @"\" + Folder4 + @"\" + Folder5);
                            }
                        }
                    }
                }
            }


ist vielleicht nicht die sauberste art, aber da es nur um ordner geht und um keine sicherheitsrelevanten daten, ist es egal :D

Gruss Jappa

Moderiert von user profile iconTh69: Vollzitat entfernt.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.01.18 20:54 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Jappa Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 19.01.18 20:58 
Hey,

also dein Code und Beispiel funktionierte ansich perfekt, nur leider konnte ich es nicht in meine Software integrieren, oder ich war zu blöd dafür :D


Gruss

Jappa
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.01.18 21:12 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Jappa Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 19.01.18 22:21 
Hey,

cFile ist nur eine String Variable.

Das problem an deinem Code ist, ich muss jeden ordner einzeln ins Array schreiben, das möchte ich aber nicht, da mein ordner mit den zu updateten dateien keine feste strucktur hat, wenn ich irgentwann mal hier oder da einen ordnernamen vom hauptprogramm ändere, müsste ich ihn auch im updater ändern und mit meiner methode, bleibt mir das erspart.

Oder ich stehe jetzt gerade ganz fest aufm schlauch :roll:


Gruss

Jappa
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.01.18 22:35 
- Nachträglich durch die Entwickler-Ecke gelöscht -