ExamineDirectory - schnelleres einlesen (Daten senden)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

ExamineDirectory - schnelleres einlesen (Daten senden)

Beitrag von Sunny »

Hi @all,
hoffentlich bekomme ich mein Problem irgendwie verständlich zusammengefasst.
Habe mir einen Server und einen Client zurecht gebastelt und für eine bestimmte Funktion habe ich nun ein kleines Problem mit der Umsetzung.

Nachdem der Server einen Befehl zum Client gesendet hat, soll der Client ein bestimmtes Verzeichnis auslesen, ein Protokoll erstellen und dann diese Daten wieder an den Server senden.
Die Daten zu senden und zu empfangen ist kein Problem und auch das Auslesen des Verzeichnisses Funktioniert. Allerdings ist mir das alles ein bischen zu langsam.

Hier mal ein Code-Snippet des Clients:

Code: Alles auswählen

ClientID = Random(9999999999)
Command$ = "SendGravityDirectoryEntrys"
Path$ = "C:\Programme\Gravity\Checks\"
Success$ = "false"

If ExamineDirectory(0, Path$, "*.*")  
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      Entrys$ + DirectoryEntryName(0) + "\" + Str(DirectoryEntrySize(0)) + "\"
    EndIf
  Wend
  FinishDirectory(0)
  
  Success$ = "true"
Else
  
EndIf

Protocol$ + "ClientID: " + Str(ClientID) + #CRLF$
Protocol$ + "Command: " + Command$ + #CRLF$
Protocol$ + "Success: " + Success$ + #CRLF$
Protocol$ + "Size: " + Str(StringByteLength(Entry$)) + #CRLF$
Protocol$ + "Content: " + Entrys$
Ich habe die ClientID mal durch einen zufälligen Wert ersetzt, Weil ich nicht meinen ganzen Code Posten wollte, der sich z.Z. über mehr als 3000 Zeilen Code erstreckt.
Wenn dieser Teil des Codes das getan hat, das er tun soll, würden die Daten an den Server gesendet werden.

Das Problem ist nun Folgendes:
Wenn das zu durchsuchende Verzeichnis sehr viele Dateien enthält, dann würde es ziemlich lange dauern die ganzen Dateinamen mit "+" an Die vorhandene Variable "Entrys$" anzhängen.
Jetzt wollte ich mal fragen, ob es irgendwie möglich ist, Die Einträge in einem Rutsch einzulesen und dann an Meine Variable "Protocol$" anzuhängen, um diese dann zu versenden.

Ich habe schon darüber nachgedacht, die Daten in einer strukturierten Liste zu speichern, allerdings hab ich keine Ahnung, wie ich diese versende und die Daten auf dem Server wieder in eine Liste umwandle. Außerdem Sollte der Verzeichnis-Inhalt zusammen mit dem Protokoll gesendet werden.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Re: ExamineDirectory - schnelleres einlesen (Daten senden)

Beitrag von Sunny »

OK...
Hab mir alles selber nochmal ein wenig durchgelesen und gemerkt, dass das alles ein bischen komisch erklärt is.

Hab mir auch schon ein wenig nen Plan gemacht, wie ich das mit dem Verzeichnis einlesen mache.
Ich werde die ganzen Einträge am besten in einer Liste speichern, jetzt würde ich nur mal gerne wissen, wie ich eine Liste mit dem Befehl "SendNetworkData" zum Server sende und die Roh-daten auf dem Server dann wieder wie ne Liste behandeln kann.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: ExamineDirectory - schnelleres einlesen (Daten senden)

Beitrag von NicTheQuick »

Dazu solltest du dir einfach ein geeignetes Netzwerkprotokoll überlegen. Also pro logischem Datenpaket sendest du erst mal was kommt, also zum Beispiel ein String, eine Liste oder anderes. Wenn es eine Liste war, sendest du als nächstes die Anzahl der Elemente, die sie enthält und dann die einzelnen Elemente. Wenn die einzelnen Element String sind, bietet es sich hier auch wieder an zuerst die Stringlänge zu schicken und dann erst den String. Auf der Empfangsseite kriegst du dann also erst mal die Information, dass eine Liste kommt und wie viele Elemente sie enthält. Dann kannst du einfach mit einer For-Next-Schleife so oft auf einen String warten wie die Liste Element enthält und fügst diese dann der lokalen Liste hinzu.
Antworten