Ordner wechseln pfad

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure-r-Freak
Beiträge: 74
Registriert: 08.03.2005 13:40

Ordner wechseln pfad

Beitrag von Pure-r-Freak »

was geht bei euch
ich habe 2 fragen:
- wie kann man den aktuellen Pfad, in den man sich befindet herausfinden
- kann mir jemand bei meiner prozedur helfen, oder andere bsp geben


als Dir$ wird ein ordnername (nur ordnername) vom client empfangen in den gewechselt werden soll.

Code: Alles auswählen

 
Procedure listfiles(Dir$, ClientID) 

  SendNetworkString(ClientID,"Inhalt von "+Dir$)   
  Delay(1) 
 
  Ok=ExamineDirectory(0,Dir$,"")   If Ok=0 
    SendNetworkString(ClientID,"Verzeichnis kann nicht durchsucht
werden!") 
    Delay(1) 
    ;SendNetworkString(ClientID,"6") 
    Goto ende 
  EndIf 

 Repeat
         FileType = NextDirectoryEntry()
         If FileType = 1
         FileName$ = DirectoryEntryName()
         FileName$ = "      "+FileName$ 
         SendNetworkString(ClientID, FileName$)
         Delay(30)
         FileName$=""
         
        ElseIf FileType = 2 ; Directory type
         FileName$ = DirectoryEntryName()
         FileName$ = "(DIR) "+FileName$  
         SendNetworkString(ClientID, FileName$)
         Delay(30)
         FileName$=""
         EndIf
          
      
Delay(70)
Until FileType = 0 

 Repeat
If NetworkServerEvent()=2
  Buffer=AllocateMemory(1000) 
  ReceiveNetworkData(ClientID,Buffer,1000) 
  change$=PeekS(Buffer)
If Left(change$, 3) = "cd " 
     cdir$=Mid(change$,4,50) 
    CDir$ = Trim(cdir$)
 
##########  Code:  in Ordner wechseln und wieder alles auflisten

Until   ##### Ordner gewechselt


 FreeMemory(0) 
          
ende: 
EndProcedure
Edit Kiffi: Code-Tags gesetzt
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Re: Ordner wechseln pfad

Beitrag von MVXA »

Pure-r-Freak hat geschrieben: - wie kann man den aktuellen Pfad, in den man sich befindet herausfinden

Code: Alles auswählen

Procedure.s GetCurDirectory()
    DefType.l ptrBuffer, lngLen
    
    ptrBuffer = AllocateMemory(#MAX_PATH)
    lngLen = GetCurrentDirectory_(#MAX_PATH, ptrBuffer)
    If Right(PeekS(ptrBuffer, lngLen), 1) <> ""
        PokeS(ptrBuffer+lngLen, ""): lngLen+1
    EndIf
    
    ProcedureReturn PeekS(ptrBuffer, lngLen)
EndProcedure
Bild
Benutzeravatar
Pure-r-Freak
Beiträge: 74
Registriert: 08.03.2005 13:40

Beitrag von Pure-r-Freak »

könntest du das vielleicht etwas kommentieren
ich verstehe das irgendwie nicht

:allright:
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

gib mir 10 minuten... ich hatte heute noch kein schlaf
system runtime 30 h :coderselixir:

edit: da

Code: Alles auswählen

Procedure.s GetCurDirectory()
    DefType.l ptrBuffer, lngLen					; Sagen PB, das wir 2 Variablen brauchen
    
    ptrBuffer = AllocateMemory(#MAX_PATH)			; Funktion reserviert für uns den Speicher und gibt eine Adresse im RAM zurück
    lngLen = GetCurrentDirectory_(#MAX_PATH, ptrBuffer)		; Funktion speichert im reserviertem Buffer den aktuelen Pfad und gibt zusätzlich noch die Länge des Pfades zurück
    If Right(PeekS(ptrBuffer, lngLen), 1) <> "\"		; Wenn am Ende noch kein "\" ist, dann eins hinzu fügen
        PokeS(ptrBuffer+lngLen, "\"): lngLen+1			; Am Ende des Speichers noch "\" ran hängen und lngI um 1 erweitern, damit die Funk unten arbeitet
    EndIf
    
    ProcedureReturn PeekS(ptrBuffer, lngLen)			; Gibt den gesamten Pfad zurück...
EndProcedure
Bild
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

Pure-r-Freak hat geschrieben:könntest du das vielleicht etwas kommentieren
ich verstehe das irgendwie nicht

:allright:
er meint das hier:

Code: Alles auswählen

Procedure$ GetCurrentDirectory() 
  result$ = Space($FF)
  GetCurrentDirectory_(Len(result$), @result$) 
  ProcedureReturn result$ + ""
EndProcedure

Debug GetCurrentDirectory()
Benutzeravatar
Pure-r-Freak
Beiträge: 74
Registriert: 08.03.2005 13:40

Beitrag von Pure-r-Freak »

ich habe leider die demo version
deshalb habich die funktion getcurrentdirectory() nich
gibts vielleicht noch ne andere lösung?
oder kann mir noch jemand sagen, wie ich das mit den ordner wechseln realisieren kann?
:roll: :allright:
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 »

@MLK
Irrtum, er meinte es so:

Code: Alles auswählen

 Procedure.s GetCurrentDirectory()
  result$ = Space(#MAX_PATH)
  GetCurrentDirectory_(#MAX_PATH, @result$)
  If Right(result$,1) <> "\" : result$ + "\" : EndIf
  ProcedureReturn result$
EndProcedure

Debug GetCurrentDirectory() 
Da Wurzelverzeichnisse von Windows nämlich schon mit Backslash zurückgegeben werden. Also sollte sich mein Programm in C:\ befinden, würde Deine Funktion einen Pfad mit 2 Backslashes zurückgeben.
Gruß
Thomas
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
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 »

@Pure-r-Freak
in der Demo kannste es so machen:

Code: Alles auswählen

Procedure.s GetCurrentDirectory()
  DLL = OpenLibrary(#PB_Any, "Kernel32.dll")
  result$ = Space(360)
  CallFunction(DLL, "GetCurrentDirectoryA", 360, @result$)
  If Right(result$,1) <> "\" : result$ + "\" : EndIf
  CloseLibrary(DLL)
  ProcedureReturn result$  
EndProcedure

Debug GetCurrentDirectory() 
Gruß
Thomas
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
Antworten