leeren speicherlatz überschreiben

  • in meinem projekt will ich eine .exe schreiben, die 8wie oben zu lesen ist) den leeren speicherlatz überschreibt,
    und dann wieder löscht.
    bin noch unerfahren, und weis nicht wie ich nun weitermachen soll.
    anregungen wären super von euch :) .

    Code
    MsgBox ( 33 , "leeren speicherplatz überschreiben" , "Starten des vorgangs?" )
    DirCreate ( "C:\567" )
    DirCreate ("C:\567\1.dat")
    MsgBox ( 0, "leeren speicherplatz überschreiben", "es wurde nun ein ordner angelegt in C:/")
    MsgBox ( 33 , "leeren speicherplatz überschreiben", "Um den vorgang zu starten, drücke <OK> ")
    $var = DriveSpaceFree( "c:\" )
    MsgBox(4096, "Freier Speicherplatz auf C:", $var & " MB")

    nun, ich habe mit der letzten zeile den freien platz auf C: ermittelt , und möchte nun mehrere textdateien schreiben, die C: nun füllen sollen.
    und das schreiben der *.txt (was immer neue Namen haben muss) soll solange gehen
    (*.txt erstellen,
    *.txt "vollschreiben",
    *.txt speichern),
    bis C: voll ist.
    was wiederrum überprüft werden soll.

    zum schluss alles wieder löschen, und das ganze wiederholen. wieoft will ich manuell eingeben könen.
    aber dazu später.
    erst mal wie gehe h jetzt vor?


    und was muss ich schreiben damit das prog. auch abbricht wenn ich auf abbrecendrücke?

    Einmal editiert, zuletzt von p32e (29. November 2010 um 12:55)

  • Hallo p32e,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinem Problem, meinst du nicht dass dies etwas zu komplex für das erste Projekt ist, denn wenn etwas schief geht gast du

    • eine vollgemüllte Festplatte, na ja kann man beheben
    • wichtige Dateien gelöscht, hoffentlich hast du dann eine Sicherung

    mfg autoBert

  • Falls du die berechtigte Warnung von autoBert berücksichtigt hast und dich dennoch dran versuchen willst solltest du dir folgende Befehle anschauen:

    [autoit]


    filewrite
    random ; zb. immer per zufall eine 1 oder 0 schreiben
    filedelete

    [/autoit]

    Damit dein Programm auch unter FAT Dateisystemen funktioniert solltest du die Maximalgröße der Dateien auf 2GB beschränken (kann man berechnen, je nachdem was du in die Dateien schreibst).
    Ausserdem sind natürlich Grundkenntnisse über den Umgang mit Schleifen (for oder while) erforderlich.
    Den Vorgang abbrechen kannst du prinzipiell jederzeit indem du das Programm über das Tray Symbol beendest. Schöner wäre natürlich eine GUI mit Pause oder Abbrechen Button, dazu solltest du dich einfach mal etas mit GUIs beschäftigen.

  • Damit dein Programm auch unter FAT Dateisystemen funktioniert solltest du die Maximalgröße der Dateien auf 2GB beschränken (kann man berechnen, je nachdem was du in die Dateien schreibst).
    Ausserdem sind natürlich Grundkenntnisse über den Umgang mit Schleifen (for oder while) erforderlich.
    Den Vorgang abbrechen kannst du prinzipiell jederzeit indem du das Programm über das Tray Symbol beendest. Schöner wäre natürlich eine GUI mit Pause oder Abbrechen Button, dazu solltest du dich einfach mal etas mit GUIs beschäftigen.

    das habe ich mit einbezogen, wusste nur nochnicht, ob ich auch 4 gb. nutzen kann.
    aber ich werde dann auf 2gb begrenzen.
    danke vür den tipp

    Einmal editiert, zuletzt von p32e (29. November 2010 um 14:53)

  • Warum erstellst du nicht eine .txt, die 4gb beinhaltet, kopierst diese so oft, bis der speicherplatz alle is (frag mich nich, wie man das überprüft), also

    Dim $zaehlen = 0
    do
    $Zaehlen += 1;damit die dateinamen unterschiedlich werden, zählen wir hier hoch
    FileCopy ((die 4gb-) ".txt", $zaehlen & ".txt" );die 4gb-txt kopieren
    until (der speicherplatz = alle);solange, bis der speicher voll is

    und löschst diese dann der reihe nach wieder, also

    for $zaehlen to 0 step -1
    FileDelete($zaehlen & ".txt")
    next

    Achtung: Pseudo-code nicht getestet(will mir ja nich den speicher vollschreiben=))

  • gute idee! selbst noch nicht dran gedacht^^
    werd ich übernehmen.

    ich weiss, dass hört sich jetzt doof an, abr ich bekomme aus irgendeinem grunde keine .txt mehr in dem pfad erstellt....., es kommt anstadt ´ner .txt ein neuer ordner der 1.txt heist...
    das kanns doch jetzt echt nicht geben......

    Grad nochmal nachgeschaut, bei FAT32 sind es 4GB. Sollte also kein Problem sein, FAT16 dürfte wohl kaum noch jemand nutzen...
    http://de.wikipedia.org/wiki/File_Allocation_Table

    Ok, danke vür die info^^ hab jetzt selbstnich nachgeschaut

  • Zitat

    ich weiss, dass hört sich jetzt doof an, abr ich bekomme aus irgendeinem
    grunde keine .txt mehr in dem pfad erstellt....., es kommt anstadt ´ner
    .txt ein neuer ordner der 1.txt heist...

    das kanns doch jetzt echt nicht geben......

    ok, hat sich gerade erledigt^^
    habeinfach fileopen enommen. erstellt automatisch die 1.txt file^^^^


    habe ein zufallszahlenscript gefunden.
    nur wie bekomme ich das umgeschrieben, damit es in meine 1.txt geschrieben wird?

    [autoit]


    For $i = 0 To UBound($aZufallszahlen) - 1
    $iZufall = Random(0, UBound($aZufallszahlen) - 1 - $i, 1)
    ConsoleWrite($i + 1 & '. Zufallszahl = ' & $aZufallszahlen[$iZufall] & @CR)
    $aZufallszahlen[$iZufall] = $aZufallszahlen[UBound($aZufallszahlen) - 1 - $i]
    Next

    [/autoit]


    "auch gelöst!"

    so. ich warte mal ab, wieviel latz diese datei benötigt....

    3 Mal editiert, zuletzt von p32e (29. November 2010 um 17:06)

  • Hallo p32e,

    was glaubst du für was ich dir in meinem 1. Post den Link zur Hilfe gegeben habe?


    mfg autoBert

    ja, ich habe nachgelesen, und rausgefunden wie ich´s machen muss.

    hatte nur noch leinere probleme, die ich noch ausmerzen musste....
    sry vürs zuspät reinschreiben.

  • Bin nun soweit, dass er wahllos zahlen in die 1.txt schreibt


    Spoiler anzeigen
    [autoit]

    MsgBox ( 33 , "leeren speicherplatz überschreiben" , "Starten des vorgangs?" )

    [/autoit] [autoit][/autoit] [autoit]

    DirCreate ( "C:\567" )

    [/autoit] [autoit][/autoit] [autoit]

    msgBox ( 0, "leeren speicherplatz überschreiben", "es wurde nun ein ordner angelegt in C:/")

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox ( 33 , "leeren speicherplatz überschreiben", "Um den vorgang zu starten, drücke <OK> ")

    [/autoit] [autoit][/autoit] [autoit]

    FileChangeDir ( "C:\567" )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    fileopen ("1.txt")

    [/autoit] [autoit][/autoit] [autoit]

    $file = FileOpen("1.txt", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iAnzahl = 200000 ; So viele Zufallszahlen sollen erstellt werden
    $iStart = 1000 ; Startwert der Zufallszahlen

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aZufallszahlen[$iAnzahl] ; Array mit Zufallszahlen deklarieren

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aZufallszahlen) - 1 ; Array mit den Zahlen füllen
    $aZufallszahlen[$i] = $iStart + $i
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aZufallszahlen) - 1 ; ab hier jetzt die Zufallszahlen ausgeben
    $iZufall = Random(0, UBound($aZufallszahlen) - 1 - $i, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    filewrite ("1.txt" , $i + 1 & '' & $aZufallszahlen[$iZufall] & @CR)
    $aZufallszahlen[$iZufall] = $aZufallszahlen[UBound($aZufallszahlen) - 1 - $i]
    Next

    [/autoit]


    jedoch mit dem code von
    »Macimac«

    Der code geht nicht....
    Bin aber schon an einer überarbeitung dran.

  • Naja
    Ich würd das ins Thema "Virus" einordnen
    Einmal verschickt kanns Schaden anrichten !


    Das solls ja nicht werden.
    oder was meinst du genau?
    den code von »Macimac«,
    oder das prog das ich schreibe?

    ps zu dem code von dir »Macimac« , es geht auch einfacher dass mit dem löschen,
    einfach den vom prog angelegten ordner löschen.

  • Naja
    Ich würd das ins Thema "Virus" einordnen
    Einmal verschickt kanns Schaden anrichten !

    Unsinn. Das Programm in der jetzigen Form richtet keinen Schaden an. Es wird lediglich die HDD gefüllt. Unter Schaden würde ich das ungewollte Löschen oder Überschreiben von Dateien ansehen, was das Programm aber nicht tut. Selbst wenn das Programm komplette Partitionen inklusive Dateien shreddern könnte wäre es noch lange kein Virus, zumindestens sofern der Nutzer vorher informiert wird und selbst entscheiden kann ob dies gemacht werden soll oder nicht.

    Solche Programme findet man wie Sand am Meer und kann diese sogar käuflich erwerben.

    Hier btw. mal eine Definition laut Wikipedia:

    Zitat


    Ein Computervirus (von lateinisch virus für „Gift“, „Schleim“; im Singular „das Computervirus“, alltagssprachlich auch „der Computervirus“, Plural „die Computerviren“) ist ein sich selbst verbreitendes Computerprogramm, welches sich in andere Computerprogramme einschleust und sich damit reproduziert. Die Klassifizierung als Virus bezieht sich hierbei auf die Verbreitungs- und Infektionsfunktion.

    Einmal gestartet, kann es vom Anwender nicht kontrollierbare Veränderungen am Status der Hardware (zum Beispiel Netzwerkverbindungen), am Betriebssystem oder an der Software vornehmen (Schadfunktion). Computerviren können durch vom Ersteller gewünschte oder nicht gewünschte Funktionen die Computersicherheit beeinträchtigen und zählen zur Malware.

    Der Ausdruck Computervirus wird umgangssprachlich auch für Computerwürmer und Trojanische Pferde genutzt, da es oft Mischformen gibt und für Anwender der Unterschied kaum zu erkennen ist.


    Quelle: http://de.wikipedia.org/wiki/Computervirus

  • Zitat

    misterspeed

    Unsinn. Das Programm in der jetzigen Form richtet keinen Schaden an. Es wird lediglich die HDD gefüllt. Unter Schaden würde ich das ungewollte Löschen oder Überschreiben von Dateien ansehen, was das Programm aber nicht tut. Selbst wenn das Programm komplette Partitionen inklusive Dateien shreddern könnte wäre es noch lange kein Virus, zumindestens sofern der Nutzer vorher informiert wird und selbst entscheiden kann ob dies gemacht werden soll oder nicht.

    Einer der weiss was ich mache.

    zudem hier is mein code, bin fast zufrieden...

    Spoiler anzeigen
    [autoit]

    MsgBox ( 0, "leeren Speicherplatz überschreiben" , "es wird nun ein Ordner angelegt in C:/" & @CR & "Ordnername: 567" & @CR & "zu beenden des Programms < Stop.exe > anklicken, " & @CR & "und der vorgang wird abgebrochen." & @CR & "und der Ordner wird gelöscht" )

    [/autoit] [autoit][/autoit] [autoit]

    DirCreate ( "C:\567" )
    DirCreate ( "C:\567\678")
    msgBox ( 0, "leeren speicherplatz überschreiben", "Vorgang starten" & @CR & "zu beenden des programms Stop.exe anklicken, " & @CR & "und der vorgang wird abgebrochen." & @CR & "und der Ordner wird gelöscht" )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    run ( "cont\slr1.exe")
    run ( "cont\slr2.exe")
    run ( "cont\slr3.exe")
    run ( "cont\slr4.exe")
    run ( "cont\slr5.exe")
    run ( "cont\slr6.exe")
    run ( "cont\slr7.exe")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    FileChangeDir ( "C:\567" )

    [/autoit] [autoit][/autoit] [autoit]

    fileopen ("1.txt")

    [/autoit] [autoit][/autoit] [autoit]

    $file = FileOpen("1.txt", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Schwerer Fehler", "Windows will nicht")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iAnzahl = 2000000 ; So viele Zufallszahlen sollen erstellt werden
    $iStart = 10000000 ; Startwert der Zufallszahlen

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aZufallszahlen[$iAnzahl] ; Array mit Zufallszahlen deklarieren

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aZufallszahlen) - 1 ; Array mit den Zahlen füllen
    $aZufallszahlen[$i] = $iStart + $i
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aZufallszahlen) - 1 ; ab hier jetzt die Zufallszahlen ausgeben
    $iZufall = Random(0, UBound($aZufallszahlen) - 1 - $i, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    filewrite ("1.txt" , $i + 1 & '' & $aZufallszahlen[$iZufall] & @CR)
    $aZufallszahlen[$iZufall] = $aZufallszahlen[UBound($aZufallszahlen) - 1 - $i]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    dircopy ("C:\567" , "678")
    FileChangeDir ( "678" )

    [/autoit] [autoit][/autoit] [autoit]

    dircopy ("C:\567" , "678")
    FileChangeDir ( "678" )

    [/autoit] [autoit][/autoit] [autoit]

    dircopy ("C:\567" , "678")
    FileChangeDir ( "678" )

    [/autoit] [autoit][/autoit] [autoit]

    ;DirRemove("C:\567"[,1])
    exit

    [/autoit]

    die

    Code
    run ( "cont\slr1.exe")
    run ( "cont\slr2.exe")
    run ( "cont\slr3.exe")
    run ( "cont\slr4.exe")
    run ( "cont\slr5.exe")
    run ( "cont\slr6.exe")
    run ( "cont\slr7.exe")

    sind alle in einem fast das gleiche:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    FileChangeDir ( "C:\567" )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    fileopen ("2.txt")

    [/autoit] [autoit][/autoit] [autoit]

    $file = FileOpen("2.txt", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iAnzahl = 2000000 ; So viele Zufallszahlen sollen erstellt werden
    $iStart = 10000000 ; Startwert der Zufallszahlen

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aZufallszahlen[$iAnzahl] ; Array mit Zufallszahlen deklarieren

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aZufallszahlen) - 1 ; Array mit den Zahlen füllen
    $aZufallszahlen[$i] = $iStart + $i
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aZufallszahlen) - 1 ; ab hier jetzt die Zufallszahlen ausgeben
    $iZufall = Random(0, UBound($aZufallszahlen) - 1 - $i, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    filewrite ("2.txt" , $i + 1 & '' & $aZufallszahlen[$iZufall] & @CR)
    $aZufallszahlen[$iZufall] = $aZufallszahlen[UBound($aZufallszahlen) - 1 - $i]
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]


    nue dass sie zb: 2.txt, 3.txt u.s.w. erstellen.
    schlissen tun sie sich automatisch,

    bin soweit, dass ich dass (wenn alles gut geht) in die "scripte kathegorie" hier im forum stelle, um zu sehen, was alteingebackene zu meinem anfängerproggi sagen^^^^

    über weitere (villeicht auch verkürzungen) vorschläge freue ich mich natürlich!

    bin halt nochanfänger... :rock:

  • Naja da fehlen noch etliche Sachen. Zum einen hast du soweit ich das sehe keinerlei Kontrolle darüber wie groß die erzeugten Dateien werden. Zum anderen prüfst du nirgendwo ob noch freier Speicherplatz verfügbar ist. Wenn du also die HDD wirklich bis aufs letzt Byte vollschreiben willst musst du dir da was anderes einfallen lassen. Ausserdem ist es unsinnig 8 Scripte paralell schreiben zulassen. Das dürfte die HDD eher ausbremsen. Du kannst auch in ein und dem selben Scirpt mehrere Dateien mit fortlaufender oder zufälliger Benennung erstellen, dazu braucht es keine 8 Scripte. Dann wäre da noch dein Lösch Befehl am Ende, den du derzeit auskommentiert hast. Dieser ist nur im Haupscript vorhanden wenn ich das recht sehe. Da du nicht prüfst ob deine anderen 7 Scripte schon fertig sind bevor der Löschbefehl kommt dürftest du da sehr sicher nicht alle Dateien löschen oder evtl. die noch laufenden Scripte stören.

    Ausserdem nochmal fileopen anschauen und auch filewrite. Du öffnest die Datei mehrmals, benutzt aber im filewrite nicht einmal das filehandle, sondern den Pfad.
    Es reicht völlig die Datei einmalig am Anfang zu öffnen, diese dann mit filewrite($file......) zu beschreiben und am ende mit fileclose zu schliessen. Das schliessen ist wichtig, insbesondere wenn die Datei später gelöscht werden soll.

    Deine dircopys versteh ich btw auch nicht so recht.

    Allgemein würde ich an deiner Stelle nur einmalig eine zufalls Datei mit exakt 1 oder 2 oder meinetwegen auch 4GB anlegen und diese dann in einer Schleife solange mit filecopy kopieren bis die HDD voll ist. Das bedeutet du musst in dieser Schleife vor jedem Kopiervorgang prüfen wieviel Platz noch übrig ist und dann entweder die Datei kopieren oder ggf. eine kleinere noch passende neue Zufallsdatei erzeugen.

    Was dir also in erster Linie fehlt ist eine Funktion mit der du byte genaue Dateien erzeugen kannst.

    Achja und tu dir selbst eienen gefallen und teste das ganze nicht auf C:\. Auf der Windows Partition könnten Probleme auftreten, wenn diese bis aufs letzte Byte vollgeschrieben wird.

  • Stimmt, sind alles dinge die ich nicht überdacht habe.

    muss wohl doch noch viel machen ^^ .
    ich werde , die 7 extra .exe wieder rausnehmen. (dachte mir mit Funktion ProcessWaitCloseProcessWaitClose hab ich das unter kontrolle)
    wegen der grösse, ich lasse sie laufen, und schaue dann nach wie gross sie sind,
    so (dachte ich) find ich die grösse schon raus.
    das mit dem speicherplatz habe ich noch in bearbeitung befor ich es einfüge.

    das mit der dircopy ist das Hauptordner in Unterordner zu kopieren (Schachtel Prinzip nur dass der zu kopierende Ordner durch die schon kopierten Ordner immer grösser wird...)
    aber wie du schn sagtest, dabei fehlt mir die kontrolle über den "noch freien platz"


    bitte bedenke, bin noch anfänger :wacko: , und grad voll begeistert von autoit :D

  • Jo Klaro ^^
    Dann wirste auch sicher uns mal erzählen können wozu das und was du im Endeffekt damit vor hast ?

  • Jo Klaro ^^
    Dann wirste auch sicher uns mal erzählen können wozu das und was du im Endeffekt damit vor hast ?


    is eigendlich ganz einfach.
    ich will mir selbst sowas eraser basteln.

    Zitat

    genau erfasst!

    den leeren speicherplatz mit "zufallsdaten.txt" überschreiben, und dann wieder löschen.
    das ganze soll zum schluss so ähnlich wie die guttmann-Methode funktionieren,
    nur halt eigenprodukt sein

    mir is schon klar, das dazwischen Welten liegen, jedoch selbsterarbeitete proggis machen mehr spass.

    hab mir ja auch schon (vor 1-2 jahren) .exe geschrieben, um mir programme automatisch nach meinen bedürfnissen zu installieren.
    zb. welche bestadteile, key´s automatisch
    eintragen lassen(keine generatoren),
    und . und . und...
    was man halt so alles eingeben muss.

    nun reicht mir das nicht mehr, und ich will mal schauen wie weit ich komme mit eigenen proggs.