Seite 1 von 1

Ordner wechseln pfad

Verfasst: 20.03.2005 20:40
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

Re: Ordner wechseln pfad

Verfasst: 20.03.2005 21:30
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

Verfasst: 20.03.2005 21:50
von Pure-r-Freak
könntest du das vielleicht etwas kommentieren
ich verstehe das irgendwie nicht

:allright:

Verfasst: 20.03.2005 21:56
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

Verfasst: 20.03.2005 21:59
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()

Verfasst: 20.03.2005 22:10
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:

Verfasst: 20.03.2005 22:42
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

Verfasst: 20.03.2005 22:48
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