FileWrite für HDD Tester dauert Ewigkeiten -.-

  • Servus,
    hab folgendes Problem, wollte mir so ein Tool zum Testen von Speicherplatz (USB-Sticks, HDDs usw.) selbst basteln.
    Problem ist nur wenn ich eingegeben habe wie groß Datei werden soll, dass es zwar geht, aber für 3,00 kb schon Ewigkeiten zum Schreiben benötigt. 1 Zeichen = 1 Byte, pro Byte mach ich dann immer eine 0 im File dazu.
    Meine Frage ist nun, gibt es einen Trick/anderen Befehl um ein Daten-Volumen perfomant zu erzeugen?

    Hier mal der Code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <file.au3>
    Opt("TrayIconDebug",1)

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

    $file = FileSaveDialog("Speicherort",@DesktopCommonDir,"Data File (*.dat)",16)&".dat"

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

    $hGUI = GUICreate("Space Tester",300,160,-1,-1)
    GUICtrlCreateLabel("Bitte Größe des zu erstellenden Files angeben und anschließend auf Start klicken.",20,20,260,50)

    GUICtrlCreateLabel("GB:",20,73,20,20)
    $gb = GUICtrlCreateInput("0",40,70,30,20)

    GUICtrlCreateLabel("MB:",80,73,20,20)
    $mb = GUICtrlCreateInput("0",100,70,30,20)

    GUICtrlCreateLabel("KB:",140,73,20,20)
    $kb = GUICtrlCreateInput("0",160,70,30,20)

    GUICtrlCreateLabel("B:",200,73,20,20)
    $b = GUICtrlCreateInput("0",220,70,30,20)

    $start = GUICtrlCreateButton("Start",125,120,50,20)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $start
    $gb = GUICtrlRead($gb)
    $mb = GUICtrlRead($mb)
    $kb = GUICtrlRead($kb)
    $b = GUICtrlRead($b)
    If StringIsDigit($gb) = 0 Or StringIsDigit($mb) = 0 Or StringIsDigit($kb) = 0 Or StringIsDigit($b) = 0 Then
    MsgBox(0,"Error","Bitte nur Zahlen in die Eingabefelder eingeben.")
    Else
    _start()
    Exit
    EndIf
    EndSelect
    WEnd

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

    Func _start()
    $b = $b + $kb*1024 + $mb*1024^2 + $gb*1024^3
    For $count = 1 To $b ;hier muss man des doch auch irgendwie anders machen können
    FileWrite($file,"0") ;hier immer +1 Zeichen bzw. Byte
    Next
    MsgBox(0,"Done","Das File wurde erfolgreich erstellt.")
    EndFunc

    [/autoit]

    Danke schon mal im Vorraus und Gruß

    Stormy

    Einmal editiert, zuletzt von stormy (23. Mai 2008 um 14:15)

  • Mhmm, stimmt, geht schon viel schneller, aber geht es noch perfomanter als so, wie es momentan ist?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <file.au3>
    Opt("TrayIconDebug",1)

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

    $file = @DesktopCommonDir&"\DataFile.dat" ;falls FileSaveDialog abgebrochen wird
    $file = FileSaveDialog("Speicherort",@DesktopCommonDir,"Data File (*.dat)",16)&".dat"

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

    $hGUI = GUICreate("Space Tester",300,160,-1,-1)
    GUICtrlCreateLabel("Bitte Größe des zu erstellenden Files angeben und anschließend auf Start klicken.",20,20,260,50)

    GUICtrlCreateLabel("GB:",20,73,20,20)
    $gb = GUICtrlCreateInput("0",40,70,30,20)

    GUICtrlCreateLabel("MB:",80,73,20,20)
    $mb = GUICtrlCreateInput("0",100,70,30,20)

    GUICtrlCreateLabel("KB:",140,73,20,20)
    $kb = GUICtrlCreateInput("0",160,70,30,20)

    GUICtrlCreateLabel("B:",200,73,20,20)
    $b = GUICtrlCreateInput("0",220,70,30,20)

    $start = GUICtrlCreateButton("Start",125,120,50,20)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $start
    $gb = GUICtrlRead($gb)
    $mb = GUICtrlRead($mb)
    $kb = GUICtrlRead($kb)
    $b = GUICtrlRead($b)
    If StringIsDigit($gb) = 0 Or StringIsDigit($mb) = 0 Or StringIsDigit($kb) = 0 Or StringIsDigit($b) = 0 Then
    MsgBox(0,"Error","Bitte nur Zahlen in die Eingabefelder eingeben.")
    Else
    _start()
    Exit
    EndIf
    EndSelect
    WEnd

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

    Func _start()
    $b = $b + $kb*1024 + $mb*1024^2 + $gb*1024^3
    $data = ""
    For $count = 1 To $b
    $data &= "0"
    Next
    FileWrite($file,$data)
    MsgBox(0,"Done","Das File wurde erfolgreich erstellt.")
    EndFunc

    [/autoit]