Dateisuche
Moderator: Moderatoren
Dateisuche
Hallo,
mit file() kann ich überprüfen ob eine Datei vorhanden ist. Wie kann man das Unterverzeichnis einer bestimmten Datei ermitteln, wenn man nur den Dateinamen, nicht aber das Unter- oder Unter\Unterverzeichnis weiß?
mfg
Wolfgang
mit file() kann ich überprüfen ob eine Datei vorhanden ist. Wie kann man das Unterverzeichnis einer bestimmten Datei ermitteln, wenn man nur den Dateinamen, nicht aber das Unter- oder Unter\Unterverzeichnis weiß?
mfg
Wolfgang
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Dateisuche
Hallo Wofgang,
Du musst doch wissen, in welchem Verzeichnis Du mittels file() prüfen willst - oder verstehe ich Dich jetzt falsch?
Wenn Du nur file( "name.txt" ) prüfst und erhältst ein .t., dann liegt die natürlich im aktuellen Verzeichnis, das Du mittels CurDir() bekommen solltest.
Viele Grüße,
Martin
Du musst doch wissen, in welchem Verzeichnis Du mittels file() prüfen willst - oder verstehe ich Dich jetzt falsch?
Wenn Du nur file( "name.txt" ) prüfst und erhältst ein .t., dann liegt die natürlich im aktuellen Verzeichnis, das Du mittels CurDir() bekommen solltest.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: Dateisuche
Hallo,
das habe ich mich nicht richtig ausgedrückt. Beispiel: Ich suche die Datei Target.ntx auf dem Laufwerk c:. Ich weiß aber nicht in welchem Unterverzeichnis diese Datei sich befindet.
mfg
Wolfgang
das habe ich mich nicht richtig ausgedrückt. Beispiel: Ich suche die Datei Target.ntx auf dem Laufwerk c:. Ich weiß aber nicht in welchem Unterverzeichnis diese Datei sich befindet.
mfg
Wolfgang
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Dateisuche
hi,
Ich kenne keine Xbase++ oder API Function die das "direkt" macht (naja unter Win7 soll es noch
einen erweiterten "Index" geben...).
Du müsstet wohl schon durch jedes Verzeichnis gehen wo du es vermutest oder vom Root ausgehen.
Hiermit "sammel" ich meine MP3 Files ein.
an DO3WORK(ccPath,ccFile) wird jedes File übergeben und kann ausgewertet werden.
was machst du in Windows wenn du die Datei suchst ?saul hat geschrieben:das habe ich mich nicht richtig ausgedrückt. Beispiel: Ich suche die Datei Target.ntx auf dem Laufwerk c:. Ich weiß aber nicht in welchem Unterverzeichnis diese Datei sich befindet.
Ich kenne keine Xbase++ oder API Function die das "direkt" macht (naja unter Win7 soll es noch
einen erweiterten "Index" geben...).
Du müsstet wohl schon durch jedes Verzeichnis gehen wo du es vermutest oder vom Root ausgehen.
Hiermit "sammel" ich meine MP3 Files ein.
Code: Alles auswählen
PROCEDURE OPENMP3DIR(oPlayer,oText)
LOCAL oFileDlg
LOCAL cPathName
LOCAL nPosi := 0
LOCAL nLstRead
oFileDlg := XbpFileDialog():new()
oFileDlg:center := .T.
oFileDlg:title := 'Start Ordner auswählen'
oFileDlg:create()
cPathName := oFileDlg:saveAs("Select Path, Press Enter or Click SAVE",,.T.)
IF .NOT. EMPTY(cPathname)
*** extract path in case user selected a file
nPosi := RAT("\",cPathName)
IF nPosi > 0
cPathName := UPPER(LEFT(cPathName,nPosi))
ENDIF
SELECT 1
...
RECUDIRS(cPathName,"*.*",{| x,y | DO3WORK(x,y)}) // ALL FILES
SELECT 1
ENDIF
RETURN
STATIC PROCEDURE RECUDIRS(p_path,p_wildcard,bblock)
IF lokRUN
aDIZ := DIRECTORY(p_path+"*.*","D") // ALL Files
* aDIZ := Directory(p_path+"*.MP3","D")
nLEN := LEN(aDIZ)
//
// das ganze sortieren muss nicht sein
//
// make all FileNames LOWER()
AEVAL(aDIZ,{| x | x.filename := LOWER(x.filename)})
ASORT(aDIZ,,,{| x,y | x.filename < y.filename})
// First, put all sub-directories
// at the beginning of the list
ASORT(aDIZ,,,{| x,y | "D" $ x.fileattrib})
// Now, lets find out where the other
// files are
AEVAL(aDIZ,{| x,i | nStartAt := ;
IF("D" $ x.fileattrib,i,nStartAt)})
// Sort sub-directories only
ASORT(aDIZ,1,nStartAt,{| x,y | x.filename < y.filename})
nStartAt ++
// Sort only the non-directory files.
// Sort Array based on the first subarray
// element
nLEN := LEN(aDIZ)
//
// es geht nur darum
//
FOR nCount := 1 TO nLEN
IF "D" $ aDIZ[nCount,F_ATTR] .AND. .NOT. ;
(aDIZ[nCount,F_NAME] = "." .OR. ;
aDIZ[nCount,F_NAME] = "..")
RECUDIRS(p_path+aDIZ[nCount,F_NAME]+"\",p_wildcard,bblock)
ELSE
EVAL(bblock,p_path,aDIZ[nCount,F_NAME])
ENDIF
NEXT
ENDIF
RETURN
FUNCTION DO3WORK(ccPath,ccFile)
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Dateisuche
Hi,
das sieht doch genau nach der Frage aus, die ich im Alaskaforum eben beantwortet habe
Der einfachste und wohl auch schnellste Weg ist mit runShell() den Befehl
dir c:\test.prg /S /B > Files.txt
auszuführen. Hierbei entsteht eine Dateiliste mit Pfadangabe+Dateiname, sonst nichts (wegen /B).
Diese Liste kann man mit memoread() einlesen und durchsuchen. Das CRLF nach dem Dateinamen ist das Ende,
das davor der Anfang des Namens. Wenn genau eine Datei in der Liste ist dürfte es keine CRLF geben,
dann hat man den Namen direkt.
das sieht doch genau nach der Frage aus, die ich im Alaskaforum eben beantwortet habe
Der einfachste und wohl auch schnellste Weg ist mit runShell() den Befehl
dir c:\test.prg /S /B > Files.txt
auszuführen. Hierbei entsteht eine Dateiliste mit Pfadangabe+Dateiname, sonst nichts (wegen /B).
Diese Liste kann man mit memoread() einlesen und durchsuchen. Das CRLF nach dem Dateinamen ist das Ende,
das davor der Anfang des Namens. Wenn genau eine Datei in der Liste ist dürfte es keine CRLF geben,
dann hat man den Namen direkt.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Dateisuche
ja meistensbrandelh hat geschrieben:Der einfachste und wohl auch schnellste Weg
das ist viel schneller !!!brandelh hat geschrieben:ist mit runShell() den Befehl dir c:\test.prg /S /B > Files.txt
... und wenn mir jemand noch verrät wie man das ohne Runshell, mit öffnen der Box, hin bekommt...
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Dateisuche
Hallo Jimmy,
du kannst die Box minimiert (glaube ich) im Hintergrund (das weiß ich ) ablaufen lassen ...
Von Phil gibt es auch noch ein RunShell, das die Ausgabe direkt in eine Xbase++ Variable (oder so ähnlich) umleiten kann.
Ansonsten gibt es nur den von dir gezeigten Weg alles in Arrays zu laden (so ähnlich habe ich es bei den Löschfunktionen auch gemacht ...)
Möglicherweise bietet die API ja noch flottere Methoden, da war doch auch was bei Phil mit SH... Funktionen.
du kannst die Box minimiert (glaube ich) im Hintergrund (das weiß ich ) ablaufen lassen ...
Von Phil gibt es auch noch ein RunShell, das die Ausgabe direkt in eine Xbase++ Variable (oder so ähnlich) umleiten kann.
Ansonsten gibt es nur den von dir gezeigten Weg alles in Arrays zu laden (so ähnlich habe ich es bei den Löschfunktionen auch gemacht ...)
Möglicherweise bietet die API ja noch flottere Methoden, da war doch auch was bei Phil mit SH... Funktionen.
Gruß
Hubert
Hubert