Seite 1 von 1

Ordner Synchronisieren...

Verfasst: 27.05.2008 21:59
von Fox
Hi... Ich hab mal wieder n Problem... Ich will 2 Ordner miteinander Synchronsieren. Da die 2 Ordner sich aber auf 2 verschiedenen Computern befinden, also im Netzwerk, ist das ganze schon etwas schwieriger. Ich habe nen Server, an den die Daten gesendet werden, und nen Client der die Daten versendet. Im moment soll es nur von dem einen Ordner in den andren Ordner funktioniern. Dazu habe ich mir das hier zusammen gebastelt.

Server.pb

Code: Alles auswählen

If InitNetwork() = 0 
  MessageRequester("Fehler", "Konnte Netzwerkverbinung nicht herstellen", 0) 
  End 
EndIf 
Port = 6832 
If CreateNetworkServer(0, Port) 
  Repeat 
    SEvent = NetworkServerEvent() 
    If SEvent 
      ClientID = EventClient() 
      Select SEvent 
        
        Case 3 
          ReceiveNetworkFile(ClientID, "C:\Sync\test")


End
      EndSelect 
    EndIf 
    
  Until Quit = 1 
  
  
  CloseNetworkServer(0) 
EndIf 

  
End    

Client.pb

Code: Alles auswählen

Input$ = InputRequester("Verbinden", "", "")

  If Input$ > ""
    a$ + Input$                                              
  Else  
    a$ = ""
  EndIf
If OpenWindow(0, 0, 0, 500, 500, "Lan-Player", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0)) 
  If CreateGadgetList(WindowID(0)) 
ButtonGadget  (1,  10, 10, 125 , 35, "Synchronisieren")
ButtonGadget  (2, 150, 10, 125 , 35, "Datei - Liste")
ButtonGadget  (3, 300, 10, 125 , 35, "Beenden")
If InitNetwork() = 0 
  MessageRequester("Error", "Konnte Netzwerkverbidnung nicht herstellen", 0) 
  End 
EndIf 
Port = 6832 
ConnectionID = OpenNetworkConnection(Input$, 6832) 
If ConnectionID 
Repeat 
      event=WaitWindowEvent() 
      Select event 
        Case #PB_Event_Gadget 
          Select EventGadget() 
Case 1             
Pattern$ = "Alle Dateien (*.*)|*.*"
  Pattern = 0    
  File$ = OpenFileRequester("Bitte wählen Sie die Datei zum Senden aus", StandardFile$, Pattern$, Pattern)
  If File$
    SendNetworkFile(ConnectionID, File$)
  MessageRequester("Client", "Datei wurde versand", 0) 
  
  CloseNetworkConnection(ConnectionID) 
Else 
  MessageRequester("Client", "Server wurde nicht gefunden", 0) 
EndIf 
Case 2
Case 3
End
  Repeat 
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  End
   End
          EndSelect 
      EndSelect 
    Until event=#PB_Event_CloseWindow 
  EndIf 
EndIf 
  EndIf
Wie man sieht empfängt der Server die durch den FileRequester ausgewählte Datei und legt sie dann im C:\Sync\ Ordner unter dem Namen "Test" ab... Jedoch möchte ich aber, das man einen Quellordner mit den Aktuellsten Dateien auswählt, oder der vorher fest definiert wird synchronisiert. Es sollen alle Dateien die im Quell Ordner vorhanden sind auf den Computer im Netzwerk in das Verzeichnis C:\Sync kopiert werden, und mit richtigem Datei Namen...

Hoffe ihr könnt mir weiterhelfen...


Danke euch

Fox

Re: Ordner Synchronisieren...

Verfasst: 27.05.2008 23:23
von Kiffi
Fox hat geschrieben:[...] also im Netzwerk
kannst Du da nicht mit Laufwerksfreigaben arbeiten? Dann könntest Du Dir
den Client-Server-Kram sparen.

Grüße ... Kiffi

Verfasst: 28.05.2008 10:25
von Fox
Hi... Ja gerne aber ich weiss nicht wie ich das machen muss...
Bzw mit welchen Befehlen..
Kannst du mir das erklären... Bitte^^

Danke


Fox

Verfasst: 28.05.2008 10:35
von gekkonier
Prinzipiell gibts doch sowas schon ;)
Oder geht es dir einfach nur darum mal sowas nachzuprogrammieren?

Windows:
http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp
Linux:
http://www.samba.org/rsync/

Verfasst: 28.05.2008 13:25
von Fox
Naja... Hätte schon lieber selbst was eigenes gemacht, weil das kann ich dann auch nach meinen wünschen und vorstellungen gestalten..

Fox

Verfasst: 28.05.2008 13:33
von ts-soft
Fox hat geschrieben:Hi... Ja gerne aber ich weiss nicht wie ich das machen muss...
Bzw mit welchen Befehlen..
Kannst du mir das erklären... Bitte^^

Danke


Fox
Such mal nach Netzlaufwerk verbinden oder ähnlich, wirste alles finden.
Droopys Lib hat sowas wohl auch bei, den Source kannste Dir auch ansehen

Verfasst: 28.05.2008 14:14
von Fox
Hi... Hab jez ne viel einfachere Lösung gefunden... Schaut sie euch an... Habs gleich mit n beispiel gemacht...

Code: Alles auswählen

#TreeGadget = 0 

Procedure ReadDirs(Path.s, Rek.l) 
  If Right(Path, 1) = "\" : Path = Left(Path, Len(Path) - 1) : EndIf 
  
  NextOK.l 
  Name.s 
  ExamineDirectory(Rek, Path, "") 
  
  Repeat 
    NextOK = NextDirectoryEntry(Rek) 
    Name = DirectoryEntryName(Rek) 
    If NextOK = 2 And Name <> "." And Name <> ".." 
      ReadDirs(Path + "\" + Name, Rek + 1) 
      While WindowEvent() : Wend 
    ElseIf NextOK = 1 
      AddGadgetItem(0, -1, Path + "\" + Name) 
    EndIf 
  Until NextOK = #False 
EndProcedure 


Procedure ReadDir(Path.s, Rek.l) 
  If Right(Path, 1) = "\" : Path = Left(Path, Len(Path) - 1) : EndIf 
  
  NextOK.l 
  Name.s 
  ExamineDirectory(Rek, Path, "") 
  
  Repeat 
    NextOK = NextDirectoryEntry(Rek) 
    Name = DirectoryEntryName(Rek) 
    If NextOK = 2 And Name <> "." And Name <> ".." 
      ReadDirs(Path + "\" + Name, Rek + 1) 
      While WindowEvent() : Wend 
    ElseIf NextOK = 1 
      AddGadgetItem(1, -1, Path + "\" + Name) 
    EndIf 
  Until NextOK = #False 
EndProcedure 

Enumeration
  #Window_0
EndEnumeration

;
Enumeration
  #Listview_0
  #Listview_1
  #Button_0
  #Button_1
  #Text_0
  #Text_1
  #Button_3
EndEnumeration


  If OpenWindow(#Window_0, 216, 0, 600, 346, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ListViewGadget(#Listview_0, 325, 10, 235, 265)
      ListViewGadget(#Listview_1, 15, 10, 235, 265)
      ButtonGadget(#Button_0, 255, 95, 65, 35, "-->")
      ButtonGadget(#Button_1, 255, 155, 65, 35, "<--")
      TextGadget(#Text_0, 15, 285, 235, 25, "IP :")
      TextGadget(#Text_1, 330, 285, 235, 25, "IP:")
      ButtonGadget(#Button_3, 195, 320, 170, 20, "Konfiguartion")
            ReadDirs("\\User\SharedDocs", 0) 
                  ReadDir("C:\", 1) 
     Repeat 
      event=WaitWindowEvent() 
      Select event 
        Case #PB_Event_Gadget 
          Select EventGadget() 
Case #Button_0  
       CopyDirectory("C:\bilder\", "\\User\SharedDocs\bilder", "", #PB_FileSystem_Recursive)
  Repeat 
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  End
   End
          EndSelect 
      EndSelect 
    Until event=#PB_Event_CloseWindow 
  EndIf 
EndIf 

Man braucht kein Netwerkzeug und es ist eigentlich gar nicht so kompliziert wie ich gedacht habe... Jetzt muss ich nur noch schaffen, das alles Ordner kopiert werden. Dazu lass ich am Besten von PB ne Liste erstelln, in die alle Dateien und Ordner geschrieben werden, und die wird dann vom Sync Programm geöffnet und auf Knopfdruck kopiert er alles^^

Danke euch für die gemachte Mühe und Hilfe...

Fox