Gelöscht?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Beitrag von DrNo »

Hallo nochmal,
Diesmal brauch ich wirklich eure Hilfe.
Ich hab den Code nun komplett fertiggestellt.
Wie schon gesagt eine kleine Anwendung.

Damit man sich das ganze besser vorstellen kann:
Bild


Das Problem dabei ist, dass sich die Anwendung bei dem Überschreiben aufhängt, oder, wie ich vermute, nicht aufhört das überschreiben zu Wiederholen. Es muss also etwas mit der b - wdh schleife zu tun haben.
Allerdings hab ich keine Ahnung was da nicht stimmt.

Was mach ich da falsch?

Code: Alles auswählen

;Shredder PB Quellcode © by Cedric

If OpenWindow(0, 422, 286, 300, 241, "Shredder",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
   If CreateGadgetList(WindowID(0))
      Frame3DGadget(0, 10, 10, 280, 50, "Datei")
      StringGadget(1, 20, 30, 210, 20, "")
      ButtonGadget(2, 240, 30, 30, 20, "...")
      TextGadget(3, 20, 90, 140, 20, "Anzahl der Wiederholungen:")
      SpinGadget(4, 170, 90, 40, 20, 1, 100, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
      Frame3DGadget(5, 10, 70, 280, 50, "")
      Frame3DGadget(6, 10, 130, 280, 50, "Status")
      TextGadget(7, 20, 150, 40, 20, "Größe: ")
      TextGadget(8, 180, 150, 40, 20, "Status: ")
      TextGadget(9, 60, 150, 120, 20, "0 Bytes")
      TextGadget(10, 220, 150, 65, 20, "?")
      ButtonGadget(11, 210, 200, 80, 30, "löschen")
      ButtonGadget(12, 10, 200, 80, 30, "abbrechen")
      SetGadgetState(4, 1)
      DisableGadget(11, 1)
   EndIf

Repeat
   Event = WaitWindowEvent()
   
   
   If Event = #PB_Event_Gadget
       If EventGadget() = 2
          file$ = OpenFileRequester("Datei...", "C:\", "Alle Dateien (*.*)", 0)
          SetGadgetText(1, file$)
          DisableGadget(11, 0)
          If ReadFile(0, file$) 
             length = Lof(0)                           
             *MemoryID = AllocateMemory(length)         
            If *MemoryID
               bytes = ReadData(0, *MemoryID, length)
               SetGadgetText(9, Str(bytes)+" Bytes")
            EndIf
           CloseFile(0)
          EndIf
          SetGadgetText(10, "Bereit")
       EndIf
   EndIf
   
   If Event = #PB_Event_Gadget
       If EventGadget() = 11
          DisableGadget(11, 1)
          SetGadgetText(10, "Überschreibe")
          wdh = GetGadgetState(4)
          If OpenFile(0, file$)
           Repeat
             Repeat
              WriteWord(0, Random($FFFF))
              a + 2 
             Until a = bytes
              CloseFile(0)
           Until b = wdh
           Else
            MessageRequester("Fehler", "Es ist ein Fehler aufgetreten. Stellen sie sicher das die Datei weder schreibgeschützt ist noch gerade verwendet wird.")
            End
          EndIf
          SetGadgetText(10, "Lösche")
          If DeleteFile(file$)
             DisableGadget(11, 0)
             SetGadgetText(10, "Fertig")
             MessageRequester("Info", "Datei wurde erfolgreich gelöscht!")
            Else
             MessageRequester("Fehler", "Es ist ein Fehler aufgetreten. Stellen sie sicher das die Datei weder schreibgeschützt ist noch gerade verwendet wird.")
             End
          EndIf
       EndIf
   EndIf
   
   If Event = #PB_Event_Gadget
       If EventGadget() = 12
          End
       EndIf
   EndIf
   
Until Event = #PB_Event_CloseWindow

EndIf

; Do not change, copy and reproduct without my permission.
Wäre danke für eure Hilfe!

grüße,
DrNo
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nochmal zum ersten code:
DrNo hat geschrieben:

Code: Alles auswählen

         a + 2 
        Until a = bytes
wenn bytes ungerade ist, wirst du niemals einen = Zustand erreichen.
du solltest also besser

Code: Alles auswählen

         a + 2 
        Until a >= bytes
benutzen.

bei deinem zweiten hast du ein anderes problem:
du zählst b überhaupt nicht hoch.
außerdem solltest du b vor der schleife auf 0 setzen,
falls du mehrere vorgänge durchführen willst.

damit der Schreibvorgang dann auch zu dem gewünschten Zeitpunkt ausgeführt wird,
könntest du ein FlushFileBuffers() zu dem zeitpunkt setzen, wo du b hochzählst.
(also vor das Until b = wdh)

ansonsten kannst du dann auch anfangen, Enumerierte Konstanten für deine Gadgets zu benutzen...


und denk dran, was ts angemerkt hat:
es gibt keine garantie, dass dieses überschreiben am physikalisch identischen platz auf der Festplatte stattfindet.
das bedeutet, dass dein proggi zwar ganz witzig ist, und vielleicht auch ein paar Laien beeindruckt,
aber unter umständen absolut nutz- und wirkungslos ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Beitrag von DrNo »

Ok danke...das mit b hatte ich wohl ganz übersehn.

Ich hab jetzt b + 1 hinzugefügt und b am anfang auf 0 gesetzt.
FlushFileBuffers() hab ich auch noch eingefügt.

Nun scheint alles fehlerfrei zu klappen.

Danke :allright:

Hier vllt. noch ein paar interessante Links:
http://www.cs.auckland.ac.nz/~pgut001/p ... e_del.html

http://www.nolte-net.de/de/article/lego_disk.html
Little John

Beitrag von Little John »

Kaeru Gaman hat geschrieben:und denk dran, was ts angemerkt hat:
es gibt keine garantie, dass dieses überschreiben am physikalisch identischen platz auf der Festplatte stattfindet.
das bedeutet, dass dein proggi zwar ganz witzig ist, und vielleicht auch ein paar Laien beeindruckt,
aber unter umständen absolut nutz- und wirkungslos ist.
Schlimmer ... es täuscht eine Sicherheit vor, die nicht vorhanden ist.

Gruß, Little John
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Beitrag von DrNo »

Jaja...es ist ja nicht für den öffentlichen Gebraucht gedacht. es war eher eine Art...Versuch. /:->
Little John

Beitrag von Little John »

Ach sooo ... na dann :)

Gruß, Little John
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, zum ausprobieren wie Programmieren überhaupt geht ist das schon ok.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten