Invalide Memory acces bei unpack memory

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Invalide Memory acces bei unpack memory

Beitrag von benpicco »

Hallo, ich habe ein Problem:
Ich wollte ganze Verzeichbisse komprimieren, aber jetzt gekomme ich diese nichtmehr entpackt! UnpackMemory meldet nur eien Invalide Memory Acess, und ich weuß nicht, warum...
Danke schonmal für die Hilfe
achso, hier der code :wink:

Code: Alles auswählen

;PB 3.94
NewList packfiles.s()
Procedure FindStringRight(String.s,StringToFind.s,StartPos)
  asc=Asc(StringToFind)
  For x=(Len(String)-StartPos) To 0 Step -1
    If PeekB(@String+x)=asc
      Break
    EndIf
  Next
  ProcedureReturn Len(String)-x
EndProcedure
Procedure SearchFile(Folder.s) 
  Protected Search.s 
  Static DirID.l 
  
  If ExamineDirectory(DirID, Folder, "") 
    DirID + 1 
    Repeat 
      
      type = NextDirectoryEntry() 
      
      If type : Search = Trim(DirectoryEntryName()) : EndIf 
      
      Select type 
        Case 2 
          If Search <> "." And Search <> ".." 
            AddElement(packfiles())
            packfiles()="mkdir "+Search
            AddElement(packfiles())
            packfiles()="cd "+Search
            Search = Folder + Search + "\" 
            SearchFile(Search) 
            AddElement(packfiles())
            packfiles()="cd .."
            UseDirectory(DirID - 1) 
          EndIf 
          
        Case 1 
            AddElement(packfiles())
            packfiles()="unpack " + Search
          
      EndSelect 
      
    Until type = 0 
    
    DirID - 1 
  EndIf 
  
EndProcedure 
Procedure PackDir(dir.s,destination.s)
  If Right(dir,1)<>"\"
    dir+"\"
  EndIf
  ClearList(packfiles())
  SearchFile(dir)
  CreatePack(destination)
  hFile=CreateFile(#PB_Any,GetTempPath()+"\index.txt")
  ForEach packfiles()
    WriteStringN(packfiles()) 
  Next
  CloseFile(hFile)
  AddPackFile(GetTempPath()+"\index.txt",9)
  ForEach packfiles()
    command$=Trim(Left(packfiles(),FindString(packfiles()," ",0)))
    param$=Trim(Right(packfiles(),Len(packfiles())-Len(command$)))
    Select command$
      Case "cd"
        If param$<>".."
          dir+param$+"\"
        Else
          dir=Left(dir,Len(dir)-FindStringRight(dir,"\",2))+"\"
        EndIf
      Case "unpack"
        AddPackFile(dir+param$,9)
    EndSelect
  Next
  ClosePack()
EndProcedure
Procedure UnpackFile(file.s, destination.s)
  If Right(destination,1)<>"\"
    destination+"\"
  EndIf
  If OpenPack(file)
    pFile=NextPackFile()
    pMem=AllocateMemory(PackFileSize())
    Debug PackFileSize()
    UnpackMemory(pFile,pMem)
    hFile=CreateFile(#PB_Any,GetTempPath()+"\index.txt")
    WriteData(hFile,PackFileSize())
    CloseFile(hFile)
    FreeMemory(pMem)
    hFile=ReadFile(#PB_Any,GetTempPath()+"\index.txt")
    Repeat
      String$=ReadString()
      command$=Trim(Left(String$,FindString(String$," ",0)))
      param$=Trim(Right(String$,Len(String$)-Len(command$)))
      Select command$
        Case "cd"
          If param$<>".."
            destination+param$+"\"
          Else
            destination=Left(destination,Len(destination)-FindStringRight(destination,"\",2))+"\"
          EndIf
        Case "mkdir"
          CreateDirectory(destination+param$)
        Case "unpack"
          pFile=NextPackFile()
          pMem=AllocateMemory(PackFileSize())
          UnpackMemory(pFile,pMem)
          hFile=CreateFile(#PB_Any,destination+param$)
          WriteData(pMem,PackFileSize())
          CloseFile(hFile)
          FreeMemory(pMem)
      EndSelect
    Until Eof(hFile)
    CloseFile(hFile)
    ClosePack()
  EndIf
EndProcedure

dir$=PathRequester("zu komprimierender Ordner","")
If dir$
  dest$=SaveFileRequester("Koprimieren als","","Comp|*.cmp",0)
  If dest$
    PackDir(dir$,dest$)
  EndIf
EndIf
dest$=""
file$=OpenFileRequester("Datei zum dekomprimieren wählen","","Comp|*.cmp",0)
If file$
  dest$=PathRequester("Zielordner","")
  If dest$
    UnpackFile(file$,dest$)
  EndIf
EndIf
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ich denke ein Thread reicht^^ :lol:

KeyKon
(\/) (°,,,°) (\/)
Antworten