System.OutOfMemoryException - Speicherfreundlicherer Code?

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    System.OutOfMemoryException - Speicherfreundlicherer Code?

    Good Morning,

    hätte da mal 'ne Frage. Folgendes:
    Ich habe ein Programm, dass eine unbekannte Anzahl von Dateien in einem Ordner auflisten soll und diese nacheinander durchsuchen soll, ob ein bestimmter String vorhanden ist und den Text aus der nächsten Zeile ebenfalls in ein Array speichern soll. Das auflisten der Dateien funktioniert tadellos. Allerdings wird beim durchsuchen der einzelnen Dateien die Speicherauslastung von 20Megabyte auf ganze 500MB erhöht und ich bekomme eine System.OutOfMemoryException.

    Zum Verständis der Code:

    VB.NET-Quellcode

    1. Dim ctilist As New List(Of String)
    2. Dim actual_selected_vehicle As String = real_omsi & CStr(cmb_vehicle_in_repgroup.Items.Item(cmb_vehicle_in_repgroup.SelectedIndex))
    3. Dim path_wf As String = My.Computer.FileSystem.GetParentPath(actual_selected_vehicle)
    4. Dim itemlist As New List(Of String)
    5. '' Alle CTI-Dateien in Liste aufnehmen
    6. For Each datei In My.Computer.FileSystem.GetFiles(real_omsi, FileIO.SearchOption.SearchAllSubDirectories, "*.cti")
    7. If datei.Contains(path_wf) Then
    8. ctilist.Add(datei)
    9. End If
    10. Next
    11. '' Jede Datei öffnen und durchgehen
    12. For cticount As Integer = 0 To ctilist.Count - 1
    13. Dim cti As String = My.Computer.FileSystem.ReadAllText(ctilist(cticount))
    14. Dim Splitted() As String
    15. Splitted = cti.Split(CChar(vbNewLine))
    16. Dim zeilen As Integer = Splitted.Count
    17. For lines As Integer = 0 To zeilen - 1
    18. If Splitted(lines).Contains("[item]") Then
    19. If itemlist.Count = 0 Then
    20. itemlist.Add(Splitted(lines + 1))
    21. Else
    22. For item As Integer = 0 To itemlist.Count - 1
    23. If Splitted(lines + 1) = itemlist(item) Then
    24. Else
    25. itemlist.Add(Splitted(lines + 1))
    26. End If
    27. Next
    28. End If
    29. End If
    30. Next
    31. Next
    32. For Each itemtoadd In itemlist
    33. list_wgrp.Items.Add(itemtoadd)
    34. Next


    Mal davon abgesehen, dass der Code wahrscheinlich ziemlich unsauber geschrieben ist... Wie kann ich den Code Performance und Arbeitsspeicher-Freundlicher gestalten? Oder wo liegt der Fehler? Ich wüsste derzeit nicht, wie ich es anders machen könnte.

    LG
    Franzbauer
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    Ich weiß ja nicht, ob ich irgendwo nun noch einen Fehler habe... Liegt es vielleicht einfach an der Verschachtelung der einzelnen Schleifen, die doch eventuell einiges an Daten auf einmal verarbeiten?

    Mein Code sieht nun so aus:

    VB.NET-Quellcode

    1. Dim list_next_line As Boolean = False
    2. For cticount As Integer = 0 To ctilist.Count - 1
    3. For Each line As String In File.ReadLines(ctilist(cticount))
    4. If list_next_line = True Then
    5. If itemlist.Count = 0 Then
    6. itemlist.Add(line)
    7. Else
    8. For item As Integer = 0 To itemlist.Count - 1
    9. If line = itemlist(item) Then
    10. Else
    11. itemlist.Add(line)
    12. End If
    13. Next
    14. End If
    15. End If
    16. If line.Contains("[item]") Then
    17. list_next_line = True
    18. End If
    19. Next line
    20. Next


    Die Auslastung steigt weiterhin von ~20MB auf rund 500MB an...
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    Ich habe deinen Code etwas umgeschrieben, weil es unübersichtlich war:

    VB.NET-Quellcode

    1. Dim list_next_line As Boolean = False
    2. For Each lst_item in ctilist
    3. For Each line As String In File.ReadLines(lst_item)
    4. If list_next_line = True Then
    5. If itemlist.Count = 0 Then
    6. itemlist.Add(line)
    7. Else
    8. For Each item_itemlist in itemlist
    9. If line <> item_itemlist Then itemlist.Add(line)
    10. Next
    11. End If
    12. End If
    13. If line.Contains("[item]") Then
    14. list_next_line = True
    15. End If
    16. Next
    17. Next


    Und dabei ist mir das aufgefallen:

    VB.NET-Quellcode

    1. For Each item_itemlist in itemlist
    2. If line <> itemlist(item) Then itemlist.Add(line)
    3. Next


    Du fügst damit "line"mehrmals deiner "itemlist" zu und zwar so viele Male, wie du Items hast. D.h. beim nächsten Mal immer mehr, deswegen auch 500 MB.

    Du musst an dieser Stelle einfach einen Flag setzen (boolesche Variable auf True) und mit "Exit For" rausgehen. Erst dann prüfst du den Flag und fügst bei Bedarf die "line" einmal hinzu.
    Versteh ich irgendwas falsch?

    Prüft, ob "[item]" vorkam und ob die nächste Zeile hinzugefügt werden soll:

    VB.NET-Quellcode

    1. If list_next_line = True Then


    Wenn noch nichts hinzugefügt wurde, soll die Zeile direkt hinzugefügt werden:

    VB.NET-Quellcode

    1. If itemlist.Count = 0 Then
    2. itemlist.Add(line)
    3. list_next_line = False
    4. Else


    Andernfalls soll er prüfen, ob der String schon in der Liste vorhanden ist. Wenn nicht, hinzufügen:

    VB.NET-Quellcode

    1. For item As Integer = 0 To itemlist.Count - 1
    2. If Not line = itemlist(item) Then
    3. itemlist.Add(line)
    4. list_next_line = False
    5. End If
    6. Next


    If-Abfrage schließen. Zudem noch: Wenn "[item]" gefunden wurde, markieren, dass die nächste Zeile hinzugefügt werden soll:

    VB.NET-Quellcode

    1. End If
    2. End If
    3. If line.Contains("[item]") Then
    4. list_next_line = True
    5. End If


    Hab ich da jetzt noch irgendwas nicht kapiert oder stimmt das?
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    Ich habe doch schon eben geschrieben, wo das Problem liegt.

    Wenn du überprüfst, ob "line" in deiner "itemlist" vorhanden ist, dann fügst du jedes Mal, wenn das "itemlist(item)" nicht gleich "line" ist, "line" hinzu: angenommen, du hast am Anfang leere Itemlist. Dann fügst du "line" hinzu und hast 1 Element. Dann prüfst du die nächste und fügst hinzu: 2 Elemente. Dann prüfst du die nächste: erst das 1.Element ->nicht gleich->fügst "line" hinzu. Aber anstatt aufzuhören, gehst du alle Elemente weiter durch und fügst jedes Mal "line" dazu, wenn es nicht gleich ist. D.h. nach diesem Durchgang hast du schon 4 Elemente. Beim nächsten Durchgang hast du 8 Elemente, weil du für jeden Element "line" hinzufügst usw.
    Okay, hab ich gerade mal auf dem Schlauch gestanden. Wie kann ich dann aber bitte abfragen, ob ein String in der Liste zweimal vorhanden ist? Genau das soll nämlich nicht der Fall sein. Denn die Datei sieht wie folgt aus:

    Quellcode

    1. [item]
    2. Name
    3. Bild
    4. [item]
    5. Name
    6. Bild1
    7. [item]
    8. Name
    9. Bild2


    Allerdings kann die Datei auch so aussehen:

    Quellcode

    1. [item]
    2. Name
    3. Bild
    4. [item]
    5. Name
    6. Bild1
    7. [item]
    8. Name
    9. Bild2
    10. [item]
    11. Name2
    12. Bild
    13. [item]
    14. Name2
    15. Bild1
    16. [item]
    17. Name2
    18. Bild2


    Die Dateien kann ich nicht verändern, die werden so vorgegeben.
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    @FranzBauer:: @sonne75: meint folgendes:

    VB.NET-Quellcode

    1. For Each item_itemlist in itemlist
    2. If line <> itemlist(item) Then
    3. itemlist.Add(line)
    4. End If
    5. Next
    Schreib das mal in Block-Syntax. Setze in die Zeile itemlist.Add(line) einen Haltepunkt und überzeuge Dich, ob diese For / If-Konstruktion so funktioniert, wie sie soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    sonne75 schrieb:

    Dim list_next_line As Boolean = False

    Ist die Position korrekt?

    Du läufst über X Dateien und sobald in irgendeiner davon [item] auftaucht werden danach alle Zeilen aus allen noch folgenden Dateien in die Liste geschrieben???

    Falls das nicht so sein sollte, probier doch mal:

    VB.NET-Quellcode

    1. Private ctilist As New List(Of String)
    2. Private ergebnis As New HashSet(Of String)
    3. Private Sub foo()
    4. For Each datei In ctilist
    5. Dim put_items_into_list As Boolean = False
    6. For Each line As String In IO.File.ReadLines(datei)
    7. If Not put_items_into_list AndAlso line.Contains("[item]") Then
    8. put_items_into_list = True
    9. ElseIf put_items_into_list = True Then
    10. If Not ergebnis.Contains(line) Then ergebnis.Add(line)
    11. End If
    12. Next line
    13. Next ' for each datei
    14. End Sub


    Das Suchen in der Liste kann man durch Verwendung eines HashSets (siehe deklaration) evtl noch etwas beschleunigen - einfach mal beides ausprobieren.

    EDIT: Sehe gerade deinen Edit. Vlt erzählst du uns mal lieber, wie die Datei(en) genau aussehen und WELCHE Daten in WELCHER Form du daraus extrahieren willst - denn ich glaube da sitzt schon mal ein Fehler ...

    FranzBauer schrieb:

    Wie kann ich dann aber bitte abfragen, ob ein String in der Liste zweimal vorhanden ist?


    sonne75 schrieb:

    Du musst an dieser Stelle einfach einen Flag setzen (boolesche Variable auf True) und mit "Exit For" rausgehen. Erst dann prüfst du den Flag und fügst bei Bedarf die "line" einmal hinzu.


    Und wieso zwei Mal?

    Zumal es bei dir eher nach einem Datensatz aussieht, was willst du mit einer List, wenn du jeweils zugehörige "Name" und "Bild" hast?

    Du benötigst eine Tabelle im DataSet mit "ID", "Name" und "Bild" als Spalten. Dann liest du nach und nach die Daten ein. Hier ist das Prinzip erklärt:

    [VB.NET] Daten laden, speichern, verarbeiten - einfachste Variante

    sonne75 schrieb:

    Zumal es bei dir eher nach einem Datensatz aussieht, was willst du mit einer List, wenn du jeweils zugehörige "Name" und "Bild" hast?
    Folgendes: Ich habe eine Datei gegeben. Dort steht für bei jedem "[item]" ein Name und ein Bild. Das Bild interessiert mich nicht, ich will nur den Namen. Da der Name aber veränderlich ist (da mehrere Dateien) kann ich nicht explizit danach suchen. Ich weiß aber, dass der Name immer eine Zeile nach "[item]" folgt. Ich will die Namen auslesen (aus jeder einzelnden Datei) und in eine Liste packen, da dies später auch im Programm aufgelistet werden soll und auch für eine andere Funktion benötigt wird. Das Auslesen an sich sollte funktionieren. Allerdings: Die Namen dürfen in der Liste später nicht doppelt vorkommen, da dies sonst zu Fehlern führen würde, wenn ich das nicht abfrage. Habe aber gemerkt, dass der Code fehlerhaft ist in seiner aktuellen Form -> Er listet alles unter [item] auf. Shit happens.
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    Gut, ich habe dir schon 2 Mal geschrieben, dass du zwar alle Elemente in der For Each Schleife durchgehen sollst, aber dabei nur den Flag (einen anderen, nicht den, den du hast) setzen sollst. Am Ende der Schleife (außerhalb schon) prüfst du den Flag, und dann fügst du erst "line" hinzu.
    Ist da etwas unverständlich?

    RodFromGermany schrieb:

    überzeuge Dich, ob diese For / If-Konstruktion so funktioniert, wie sie soll.

    FranzBauer schrieb:

    ich will
    mich nicht überzeugen wie mein Code läuft, ich will von Euch eine fertige Lösung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    FranzBauer schrieb:

    Er listet alles unter [item] auf

    Sagte ich doch ;)

    Also mal Tacheles:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. ' create a file for testing
    3. If Not File.Exists("daten1.dat") Then
    4. MessageBox.Show("Erzeuge Demo-Dateien", "Start", MessageBoxButtons.OK)
    5. Dim r As New Random
    6. For outputnum = 1 To 10
    7. Dim path As String = "daten" & outputnum & ".dat"
    8. Using fs As New StreamWriter(path, False)
    9. For i = 1 To 1000000
    10. fs.WriteLine("[item]")
    11. fs.WriteLine("foo" & r.Next(1, 1000).ToString)
    12. fs.WriteLine("bar" & r.Next(1, 1000).ToString)
    13. fs.WriteLine()
    14. Next
    15. fs.Flush()
    16. fs.Close()
    17. End Using
    18. Next
    19. MessageBox.Show("Fertig!", "Start", MessageBoxButtons.OK)
    20. End If
    21. Dim Ergebnis As New HashSet(Of String)
    22. MessageBox.Show("Beginne Analyse", "Messung", MessageBoxButtons.OK)
    23. Dim stp = Stopwatch.StartNew
    24. For Each datei In IO.Directory.GetFiles(".", "daten*.*")
    25. Using sr As New StreamReader(datei)
    26. Dim TakeNextLine As Boolean = False
    27. Dim line As String
    28. While Not sr.EndOfStream
    29. line = sr.ReadLine
    30. If TakeNextLine Then
    31. TakeNextLine = False
    32. If Not Ergebnis.Contains(line) Then Ergebnis.Add(line)
    33. Else
    34. If line.Contains("[item]") Then TakeNextLine = True
    35. End If
    36. End While
    37. sr.Close()
    38. End Using
    39. Next
    40. stp.Stop()
    41. MessageBox.Show("Fertig nach " & stp.ElapsedMilliseconds & " ms", "Messung", MessageBoxButtons.OK)
    42. End Sub


    Der erste Teil ist klar. Erstellt ein paar Dummy-Dateien, die dem beschriebenen Format entsprechen. Im zweiten Teil läuft die Schleife über alle Dateien die dem Suchmuster entsprechen und trägt genau dann die gelesene Zeile in das HashSet ein, wenn a) in der vorigen Zeile [item] stand und b) der Text noch nicht im Hashset enthalten ist. Die 10 Dateien mit je 4 Mio Zeilen verarbeitet er bei mir in rund 4 Sekunden und findet jeweils 999 eindeutige "Namen" - was aufgrund der Erzeugung im ersten Teil auch zu erwarten war.
    Ich hab das ganze auch mit ReadLines getestet, da ist er bei mir rund 2 Sekunden langsamer ... dafür sieht der Code gefälliger aus. Ein Speicherproblem konnte ich in beiden Fällen nicht feststellen.

    Nachtrag: Parallel gehts etwas flotter, obwohl natürlich irgendwann das Lesen von der Platte der Engpass ist.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Parallel.ForEach(Of String)(IO.Directory.GetFiles(".", "daten*.*"),
    2. New Threading.Tasks.ParallelOptions With {.MaxDegreeOfParallelism = 8},
    3. Sub(datei As String)
    4. Dim l As New HashSet(Of String)
    5. Dim TakeNextLine As Boolean = False
    6. For Each line In File.ReadLines(datei)
    7. If TakeNextLine Then
    8. TakeNextLine = False
    9. If Not l.Contains(line) Then l.Add(line)
    10. Else
    11. If line.Contains("[item]") Then TakeNextLine = True
    12. End If
    13. Next
    14. SyncLock ErgebnisLock
    15. For Each s In l
    16. If Not Ergebnis.Contains(s) Then l.Add(s)
    17. Next
    18. End SyncLock
    19. End Sub)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    RodFromGermany schrieb:

    RodFromGermany schrieb:

    überzeuge Dich, ob diese For / If-Konstruktion so funktioniert, wie sie soll.

    FranzBauer schrieb:

    ich will
    mich nicht überzeugen wie mein Code läuft, ich will von Euch eine fertige Lösung.
    Vielen Dank für diesen extrem hilfreichen Beitrag. Das trägt noch weniger dazu bei. Falls du dir meine Antwort durchgelesen hast (wovon ich nicht ausgehe) wäre dir etwas aufgefallen. Sorry, ich bekomm es nicht gebacken. Tut mir leid. Aber du Besserwisser musst dein Maul aufreisen. Wenn ich es hinbekommen würde, bräuchte ich eure Hilfe nicht. Entschuldige für meine Ausdrucksweise: Solch einen Scheiß braucht keine Sau. Ich finde es unverschämt, was du dir rausnimmst. Ich hab den Code nicht bereits vier mal komplett umgeworfen um zu schauen, ob es eine reine Logiksache war. Jeder hat mal einen schlechten Tag. Heute hab ich eben mal einen schlechten. Ich habe doch kapiert, wo mein Fehler liegt. Ich verstehe nur nicht, wie ich ihn beheben kann. Mal davon ab: Durch das ganze herumprobieren funktioniert es nun gar nicht mehr. Aber trotzdem Danke für deinen so unheimlich hilfreichen Beitrag. Besser geht es nicht! Nicht jeder Mensch ist fehlerfrei. Ich beschäftige mich nun seit 4 Monaten das erste mal wieder richtig mit Visual Basic und versuche mich an Dingen, die nicht klappen wollen. Aber du, Herr Üb3rpr0, meinst du hättest den Plan im Sack. Klar, wenn ich mich täglich damit beschäftigen würde, hätte ich auch keine Probleme. Und ich wette: Dafür bekomme ich nun auch noch eine Verwarnung. Weswegen? Weil man seine eigene Meinung nicht ausdrücken darf.

    BTT:
    Ich probier es weiterhin. Kann doch nicht so schwer sein. Ist doch wohl nur ein beschissener Logikfehler von mir, so wie ich mich kenne ;)
    Dank meiner rumfummlerei funktioniert der Code derzeit nicht mehr, muss ich nochmals von vorne anfangen. Vielleicht funktioniert es dann, wenn ich mal logisch denke und versuche zu verstehen was ich getippt habe. Danke für eure Geduld mit mir. :):thumbup:
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!

    FranzBauer schrieb:

    Ich probier es weiterhin.

    Anderen wirfst du vor, Posts nicht zu lesen, aber selbst tust du das wohl auch nicht ...


    wenn ich mal logisch denke

    "Wenn der Eintrag (die Zeile) noch nicht in der Liste ist, dann füge die Zeile hinzu"
    aufgehübscht:
    "Wenn nicht Liste enthält Zeile dann Liste füge hinzu Zeile"
    ins englische:
    if not list contains zeile then add zeile
    ins VB'ische
    If not List.Contains(Zeile) Then Liste.Add(Zeile)
    Ich habe dir mehrmals geschrieben, wo dein Fehler liegt und wie du ihn beheben sollst. Du gehst Null darauf ein und statt auf den wirklich richtigen Vorschlag vom @RodFromGermany: einzugehen, zu VERSTEHEN, was denn dein Programm macht, wirst du hier giftig und ausfällig.

    Was willst du? Fertigen Code? Kriegst du nicht. Erklärungen willst du nicht. Also?

    EDIT: oder so, wie @picoflop: es vorschlägt, ist noch kürzer. :) Ich denke immer eher logisch und ab und zu zu umständlich.
    Nochmals von Anfang an, für alle:
    @picofloP: Danke für deine Hilfe, hat leider nichts gebracht, bis darauf, dass ich eine andere Möglichkeit genutzt habe.

    @sonne75: Ich habe das Problem doch beim zweiten Erklärversuch verstanden. Ist doch gut, wo liegt jetzt das Problem? Ich hab doch versucht das ganze umzuschreiben, anders zu lösen und was weiß ich nicht alles. Die Auflistung hat doch funktioniert. Allerdings mit weiterhin dem Hinternis, dass manche Einträge doppelt angezeigt werden.
    Gut, ich habe dir schon 2 Mal geschrieben, dass du zwar alle Elemente in
    der For Each Schleife durchgehen sollst, aber dabei nur den Flag (einen
    anderen, nicht den, den du hast) setzen sollst. Am Ende der Schleife
    (außerhalb schon) prüfst du den Flag, und dann fügst du erst "line"
    hinzu.

    Ist da etwas unverständlich?
    Ja, tut mir leid. Ich bin heute eben nicht gut drauf. Ich steh eben mal auf dem Schlauch und versuche mein bestes, aber ich komm einfach nicht drauf.
    Was willst du? Fertigen Code? Kriegst du nicht. Erklärungen willst du nicht. Also?
    Was ich will? Dass man einem Laien vielleicht etwas verständlicher erklärt, was man meint. Ich verstehe nicht alles. Ich denke zu kompliziert: Ein riesen Problem von mir.

    @RodFromGermany: Ich habe mir das ganz genau angeschaut. Ich habe doch, wie zwei Zeilen obendrüber bereits geschrieben, erkannt, wo das Problem liegt. Ich hab doch gesehen beim Debuggen, dass der Code an sich nicht so funktioniert wie er sollte.
    Du unterstellst mir allerdings, dass ich nur auf fertigen Code aus bin. Eben nicht: Ich habe doch bereits genug Code gezeigt den ich selbst geschrieben und umgemodelt habe. Ich bin hier nicht wie ein Hund angelaufen gekommen "Ey, macht mir mal." Das war auch nie meine Absicht!

    @All:
    Versteht es nicht falsch. Ich wiederhole mich nochmals: Ich check im Moment einige logische Dinge nicht. Sonst wäre doch der Code der im ersten Post zu sehen ist nicht entstanden.

    Nochmals vielen Dank und entschuldigt meine Ausdrucksweise und mein an die Decke gehen :)
    Ich werde es weiterhin versuchen und mich hier melden, wenn ich es kapiert habe. Bis dahin...

    Sorry, jetzt hab ich doch glatt was vergessen:
    Warum funktioniert es nur in einem Verzeichnis und sobald ich auf ein anderes Verzeichnis wechsle funktioniert es nicht? Dort sind auf jeden Fall auch solche Dateien enthalten? :wacko: ?(
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    Ach du heilige. Na eigentlich meinte ich das aus deiner ersten Antwort. Das andere hab ich erst beim jetzigen durchsehen bemerkt. Alles klar, hat sich das erledigt -> war halt auf was anderes bezogen :D

    Edit:
    Ja sehr geil pico!
    Bissel umgemodelt dein Code und es funktioniert bestens. Diesen Weg kannte ich nicht, sorry dass ich hier deswegen so stress gemacht habe... :(
    Musstest mich doch mit dem Kopf draufhauen, bis ich es kapiert habe.
    :whistling::S

    LG
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FranzBauer“ ()