Dateiabgleich

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Dateiabgleich

Beitrag von Tafkadasom2k5 »

OK, ich vertraue euch jetzt meinen Rohbau meines noch lange nicht fertigen MP3-File Listers an.
Dabei funktioniert der Dateiabgleich noch nicht.
Ich lasse erst die Ordner mit Unterodnern durchsuchen und dann erstelle ich inner LinkedList eine Liste (wer hätte das gedacht :mrgreen: )die Attribute die diese Datei hat..
Die ID des ordners (über examinedirectory(#pb_any...)) in dem sich die datei befindet,der Typ (MP3 oder DIR), der Pfad, der name an sich, und die Größe.

Aber trotzdem funktioniert das "Browsen" in der Liste nicht.
Ab und an zeigt er Dateien an, die nicht in dem Ordner sind.
Vll kann mir jemand helfen?
Am besten ihr führt mein Programm mal stumpf aus, und lasst euch die komplette Liste mal debuggen (hab ich im aktuelen Code schon integriert) und guckt dann, ob ihr den Fehler in meiner "Fill_IconList()" Procedure findet..
Achja:
Komischerweise funktioniert trotz der konfusen Ordnerausgabe die Datei-Assoziation-das heisst, dass er bei mir bisjetzt, egal was ich angeklickt habe, immer die richtige MP3 wiedergegeben hat...

Gr33tz
Tafkadasom2k5

Code: Alles auswählen

Global Quit.l
Global BrowseStick.l
Global TotalMB
Global DirectoryID.s
Global dirID.l
Global momdir.s
NewList alledateien.s()
Global CurrentPath.s

;- Window Constants

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Listicon_Stick
  #String_Stick
  #Text_Ziel
  #Button_Browse_Stick
  #String_Quell
  #Text_1
  #Button_Browse_Quell
  #CheckBox_Format
  #CheckBox_Check
  #Button_Proceed
  #CheckBox_Directorys
  #Radio_Interpret
  #Radio_Letter
  #ExplorerList_0
  #CheckBox_Backup
  #Frame3D_0
  #Image_Song
EndEnumeration

;- StatusBar Constants
;
Enumeration
  #StatusBar_1
EndEnumeration


;- Image Plugins

;- Image Globals
Global Image0
Global Image1
Global Image3
Global Image4

;- Catch Images
Image0 = CatchImage(0, ?Image0)
Image1 = CatchImage(1, ?Image1)
Image3 = CatchImage(3, ?Image3)
Image4 = CatchImage(4, ?Image4)

;- Images
DataSection
Image0:
IncludeBinary "test1.bmp"
Image1:
IncludeBinary "test2.bmp"
Image3:
IncludeBinary "icon1.ico"
Image4:
IncludeBinary "icon2.ico"
EndDataSection

Structure int64
  Long1.l
  Long2.l
EndStructure


Procedure GetStickInfoSize(Drive.s)
 
GetDiskFreeSpaceEx_(@Drive, BytesFreeToCaller.int64, TotalBytes.int64, TotalFreeBytes.int64)
TotalMB = ((TotalBytes\Long1 >> 20) & $FFF) | (TotalBytes\Long2 << 12)
StatusBarText(#StatusBar_1, 0, "Gesamt Speicher:" + Str(TotalMB) + "MB")
FreeMB = ((TotalFreeBytes\Long1 >> 20) & $FFF) | (TotalFreeBytes\Long2 << 12)
StatusBarText(#StatusBar_1, 1, "Freier Speicher:" + Str(FreeMB) + "MB")

EndProcedure
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 172, 14, 809, 625,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "S-MP3 Manager v 0.1")
    If CreateStatusBar(#StatusBar_1, WindowID())
      AddStatusBarField(150)
      AddStatusBarField(150)
      
    EndIf
    
    If CreateGadgetList(WindowID())
      ListIconGadget(#Listicon_Stick, 30, 100, 280, 480,"",100)
      StringGadget(#String_Stick, 30, 40, 150, 20, "",#PB_String_ReadOnly)
      GadgetToolTip(#String_Stick, "Geben Sie hier das Ziellaufwerk manuell an, oder klicken Sie auf 'Browse' damit s-MP3 Ihnen hilft.")
      TextGadget(#Text_Ziel, 30, 20, 80, 20, "Zieldatenträger:")
      ButtonImageGadget(#Button_Browse_Stick, 90, 70, 60, 20, Image0)
      StringGadget(#String_Quell, 350, 40, 150, 20, "",#PB_String_ReadOnly)
      GadgetToolTip(#String_Quell, "Geben Sie hier das Quelllaufwerk manuell an, oder klicken Sie auf 'Browse' damit s-MP3 Ihnen hilft.")
      TextGadget(#Text_1, 350, 20, 90, 20, "Quelldatenträger:")
      ButtonImageGadget(#Button_Browse_Quell, 420, 70, 80, 20, Image1)
      CheckBoxGadget(#CheckBox_Format, 640, 110, 130, 20, "Datenträger Formatieren")
      GadgetToolTip(#CheckBox_Format, "Wenn Sie diese Checkbox aktivieren, wird der Datenträger zuerst gelöscht, bevor er neu beschrieben wird.")
      CheckBoxGadget(#CheckBox_Check, 640, 300, 80, 20, "Überprüfen")
      GadgetToolTip(#CheckBox_Check, "Wenn Sie diese Checkbox aktivieren, wird der Datenträger vor Beschreiben nach gleichen Dateien Untersucht. Es wird eine Medlung gezeigt, wenn 2 Dateinen auf dem Zieldatenträger als doppelt erscheinen.")
      ButtonGadget(#Button_Proceed, 680, 550, 90, 30, "Ausführen")
      CheckBoxGadget(#CheckBox_Directorys, 640, 180, 120, 30, "Automatisch sortieren")
      GadgetToolTip(#CheckBox_Directorys, "Wenn Sie diese Checkbox aktivieren, sortiert S-MP3 die Dateinen auf dem Zieldatenträger.")
      OptionGadget(#Radio_Interpret, 660, 210, 100, 30, "Nach Interpreten")
      OptionGadget(#Radio_Letter, 660, 240, 100, 30, "Nach Titelnamen")
      ExplorerListGadget(#ExplorerList_0, 330, 100, 280, 480, "",#PB_Explorer_HeaderDragDrop)
      CheckBoxGadget(#CheckBox_Backup, 640, 140, 120, 30, "Backup tätigen")
      Frame3DGadget(#Frame3D_0, 620, 80, 170, 270, "Optionen")
      
    EndIf
  EndIf
EndProcedure

Procedure Fill_List(Directory.s)
  Ordner = ExamineDirectory(#PB_Any,Directory,"*.*")   ;Alle Dateien Durchsuchen
  
  Repeat                             ;wird wiederholt, bis das Ende des Ordners erreicht ist
    Test = NextDirectoryEntry()      ;Test enspricht hiernach 1 oder 2-d.H., dass man daran erkent ob es ne Datei oder n Ordner ist.
    If Test = 1
      If UCase(GetExtensionPart(DirectoryEntryName())) = "MP3" Or UCase(GetExtensionPart(DirectoryEntryName())) = "WMA" ;nur zur Liste hinzufügen, wenn die Dtei eine mp3 ist.
        AddElement(alledateien())
        alledateien() = ReplaceString(Str(Ordner) + ";" + "MP3" + ";" + Directory + "\" + DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize()),"\\","\")
      EndIf
      
    EndIf
    If Test = 2 And DirectoryEntryName() <> "." And DirectoryEntryName() <> ".."
      AddElement(alledateien())
      alledateien() = Str(Ordner) + ";" + "DIR" + ";" + Directory + "\" +  DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      NewDirectory.s = Directory + "\" + DirectoryEntryName()
      NewDirectory = ReplaceString(NewDirectory, "\\", "\")
      Fill_List(NewDirectory)
      UseDirectory(Ordner)
    EndIf
    
    
  Until Test = 0
  
EndProcedure


 
  
Procedure Fill_ListIcon(CurrentDir.s)
  
ClearGadgetItemList(#Listicon_Stick)


  ForEach alledateien()
    If StringField(alledateien(),1,";") = CurrentDir
      If StringField(alledateien(),2,";") = "DIR"
        AddGadgetItem(#Listicon_Stick,-1,StringField(alledateien(),4,";"),Image4)
      EndIf
    EndIf
  Next
  
  ForEach alledateien()
    If StringField(alledateien(),1,";") = CurrentDir
      If StringField(alledateien(),2,";") = "MP3"
        AddGadgetItem(#Listicon_Stick,-1,StringField(alledateien(),4,";"),Image3)
      EndIf
    EndIf
  Next
EndProcedure


Procedure GUI()
  EventID = WaitWindowEvent()

    
    If EventID = #PB_Event_CloseWindow
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
      Select EventGadgetID()
        Case #CheckBox_Format
          If GetGadgetState(#CheckBox_Format) = 1
            DisableGadget(#CheckBox_Check,1)
            ClearGadgetItemList(#Listicon_Stick)
          Else
            DisableGadget(#CheckBox_Backup,0)
            DisableGadget(#CheckBox_Check,0)
            
            If GetGadgetText(#String_Quell) <> ""
              Fill_List(GetGadgetText(#String_Quell))
            EndIf
            
          EndIf
        Case #CheckBox_Directorys
          If GetGadgetState(#CheckBox_Directorys) = 1
            DisableGadget(#Radio_Interpret,0)
            DisableGadget(#Radio_Letter,0)
          Else
            DisableGadget(#Radio_Interpret,1)
            DisableGadget(#Radio_Letter,1)
          EndIf
        Case #Button_Browse_Quell
          Quellpfad.s = PathRequester("Wählen Sie den Quellpfad aus","C:/")
          If Quellpfad <> "C:/" And Quellpfad <> ""
            SetGadgetText(#String_Quell,Quellpfad)
            SetGadgetText(#ExplorerList_0,Quellpfad)
            
          EndIf
          
        Case #Button_Browse_Stick
          Zielpfad.s = PathRequester("Wählen Sie den Zielpfad aus","C:/")
          If Zielpfad <> "C:/" And Zielpfad <> ""
            SetGadgetText(#String_Stick,Zielpfad)
            BrowseStick = 1
          EndIf
          
          
      EndSelect
    EndIf
  EndProcedure
    
    
  



Open_Window_0()
SetGadgetState(#Radio_Interpret,1)
DisableGadget(#Radio_Interpret,1)
DisableGadget(#Radio_Letter,1)

Repeat
  GUI()
  If BrowseStick = 1
    CurrentPath = GetGadgetText(#String_Stick)
    ClearGadgetItemList(#Listicon_Stick)
    Fill_List(GetGadgetText(#String_Stick))
    GetStickInfoSize(GetGadgetText(#String_Stick))
    Standartdir.l = ExamineDirectory(#PB_Any,GetGadgetText(#String_Stick),"*.*")
    Fill_ListIcon(Str(Standartdir))
    BrowseStick = 0
  EndIf
  
  If EventType() = #PB_EventType_LeftDoubleClick
    If GetGadgetText(#Listicon_Stick) <> ""
      ForEach alledateien()
        ID.s = StringField(alledateien(),1,";")
        Typ.s = StringField(alledateien(),2,";")
        Pfad.s = ReplaceString(StringField(alledateien(),3,";"),"\\","\")
        Name.s = StringField(alledateien(),4,";")
        
        If Name = GetGadgetText(#Listicon_Stick)
          If Typ = "DIR"
            Debug Pfad
            ClearGadgetItemList(#Listicon_Stick)
            AddGadgetItem(#Listicon_Stick,-1,"Zurueck",Image4)
            
            NewDirID.s = Str(ExamineDirectory(#PB_Any,Pfad,"*.*"))
            Fill_ListIcon(NewDirID)
            
          EndIf
          If Typ = "MP3"
            RunProgram(Pfad)
          EndIf
        EndIf
        
        Next
        
        
        
    EndIf
  EndIf
  
Until Quit = 1
ForEach alledateien()
  Debug alledateien()
Next


OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Bei mir funktioniert das Ding wunderbar
und zeigt alles korekt an.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Deine Mainloop kann doch garnicht funktionieren. In GUI() wartest Du ein Ereignis ab, danach springst Du in dem Rumpf und fragst

Code: Alles auswählen

If EventType() = #PB_EventType_LeftDoubleClick 
Wie soll den EventType() gefüllt sein :freak:
Sind mit Sicherheit noch mehr Fehler. Aber solange die Ereignis-Schleife so unübersichtlich ist, durch diese merkwürdige Teilung, werde ich erstmal nicht weitersuchen.
Den Teil, den Du anscheinend immer ausführen möchtest, kannste in eine Procedure stopfen und per Timer aufrufen, dann kannste auch eine vernünftige Ereignis-Schleife erstellen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Macros hat geschrieben:Bei mir funktioniert das Ding wunderbar
und zeigt alles korekt an.
Schonmal im linken ListIcon nen Ordnerwechsel gemacht?

@TS_Soft:
mein programm funkjtioniert wunderbar und auch der Doubleklick und so funktioniert ohne Weiteres.
Das Problem sind die Prozeduren "FillList()" und "Fill_LisIcon()".

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Tafkadasom2k5 hat geschrieben: @TS_Soft:
mein programm funkjtioniert wunderbar und auch der Doubleklick und so funktioniert ohne Weiteres.
Das Problem sind die Prozeduren "FillList()" und "Fill_LisIcon()".

Gr33tz
Tafkadasom2k5
Dann ist es ja schön für Dich :wink:
Für mich ist das nur Kuddelmuddel, aber vielleicht ist das Dein besonderer Stil :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Ok Ok, läuft wohl doch nicht so gut,
aber wenn´s beim ersten mal richtig
eingelesen wird, musst du doch nur die
entsprechenden Sachen zurücksetzen,
damit es auch bei zweiten mal klappt.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Kurze Frage:

Gibt " ExamineDirectory(#PB_Any,C:/,"*.*") "
Immer die gleiche ID raus, oder wechselt die, wenn ich das 2te mal Examinedirectory() aufrufe?

OK, ich teste es gleich ,mal aus-wenn ja, dann lässt das mein Problem schon verkleinern...

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Code: Alles auswählen

Pfad1.s = PathRequester("Wählen Sie den Quellpfad aus","C:/")
OrdnerID.l = ExamineDirectory(#PB_Any,Pfad1,"*.*")
bla.l = ExamineDirectory(#PB_Any,"C:\","*.*")
OrdnerIDZWO.l = ExamineDirectory(#PB_Any,Pfad1,"*.*")

Debug Pfad1 
Debug Str(OrdnerID)
Debug Str(OrdnerIDZWO)
Erklärt ALLES :)

Ich dachte, dass die Ordner FESTE IDs haben ^^

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Antworten