directory() gibt keine Attribute zurück ?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

directory() gibt keine Attribute zurück ?

Beitrag von brandelh »

Hallo,

auf eine Message im Alaska-Forum - ich konnte es kaum glauben - habe ich folgendes probiert:

Code: Alles auswählen

#include "directry.ch"
proc main
   ? "F_ATTR" ,F_ATTR
   ? "IsDir('C:\Temp\TEST1\TEST2')",IsDir("C:\Temp\TEST1\TEST2")
   cSuch := "C:\Temp\TEST1\*.*"
   ? "cSuch",cSuch
   aDir := directory(cSuch,"D")
   aeval(aDir,{|aD|qout("-"+aD[F_ATTR]+"-",aD[F_NAME])})
return
*---------------------------------------------------------------------------
function IsDir(cDirName)     // keine Wildcards !!!
   local aNames, lReturn
   if right(cDirName,1) = "\"
      cDirName := left(cDirName,len(cDirName)-1)
   endif
   aNames := directory(cDirName,"D")
   if empty(aNames)          // da das letzte /
      lReturn := .f.
   else
      lReturn := .t.
   endif
return lReturn
Dies ist das Ergebnis:
F_ATTR 5
IsDir('C:\Temp\TEST1\TEST2') J
cSuch C:\Temp\TEST1\*.*
-- .
-- ..
-- NeueTextdatei.txt
-- Test2
-- text_READONLY.txt
Test2 IST ein Verzeichnis und bei TEXT_READONLY.TXT wurde das ReadOnly Flag gesetzt.

Das ist schon seltsam, denn ich meine vor kurzem noch Attribute gesehen zu haben ... allerdings ist die Implementation meiner älteren Funktion IsDir() so ausgelegt, dass sie NICHT den Rückgabewert des Attributs abfragt. Wohl aus gutem Grund, denn so wie sie ist funktioniert diese.

Übrigens gleiches Verhalten zwischen 1.82 und 1.90.

Könnt Ihr dieses Verhalten bestätigen oder ist es eventuell abhängig vom BS ?
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

gerade viel mir ein, dass ich mal in der KB nachsehe und da...
steht was dazu drin

Also das BS verbietet die Rückgabe, es sei den man gibt dies frei ...
Allerdings habe ich auf dem PC Admin Rechte und der Explorer kann die Anzeigen, es kann also nicht am Recht liegen.

Im Artikel zeigen Sie einen Umweg über die XbToolsIII ... allerdings gibt es ja auch noch FAttr( <cFileName>, [<cAttribute>] ) --> cFileAttributes
das teste ich jetzt gleich ...

Nein, damit geht es auch nicht.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
und was ist mit der guten, alten ADir()-Funktion?
Die sollte dann ja auch nicht gehen, wenn es am BS liegt...

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Martin,

deine Frage ist mir Befehl :wink:

Code: Alles auswählen

#include "directry.ch"
proc main
   ? "F_ATTR" ,F_ATTR
   ? "IsDir('C:\Temp\TEST1\TEST2')",IsDir("C:\Temp\TEST1\TEST2")
   cPath := "C:\Temp\TEST1\"
   cSuch := "C:\Temp\TEST1\*.*"
   ? "cSuch",cSuch
   aDir := directory(cSuch,"D")
   aeval(aDir,{|aD|qout("-"+aD[F_ATTR]+"-",aD[F_NAME],"*"+FAttr( cPath+aD[F_NAME],"R" )+"*")})
   wait
   ? "jetzt mit Adir()"

   nCount     := ADir( cSuch )
   aFN        := Array( nCount )
   aFS        := Array( nCount )
   aFD        := Array( nCount )
   aFT        := Array( nCount )
   aFA        := Array( nCount )

   ADir( cSuch,aFN,aFS,aFD,aFT,aFA )
   for x := 1 to nCount
       ? aFN[x],aFS[x],aFD[x],aFT[x],aFA[x]
   next
return

*---------------------------------------------------------------------------
function IsDir(cDirName)     // keine Wildcards !!!
   local aNames, lReturn

   if right(cDirName,1) = "\"
      cDirName := left(cDirName,len(cDirName)-1)
   endif

   aNames := directory(cDirName,"D")

   if empty(aNames)          // da das letzte /
      lReturn := .f.
   else
      lReturn := .t.
   endif
return lReturn
gibt zurück:
F_ATTR 5
IsDir('C:\Temp\TEST1\TEST2') J
cSuch C:\Temp\TEST1\*.*
-- . **
-- .. **
-- NeueTextdatei.txt **
-- Test2 **
-- text_READONLY.txt **
Press any key to continue...
jetzt mit Adir()
NeueTextdatei.txt 0 04.06.2006 11:33:54
text_READONLY.txt 6 04.06.2006 11:36:07
Also keine Verzeichnisse und auch keine Attribute
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Nun habe ich auch noch den Workaround von der KB getestet:

Code: Alles auswählen

  // Query the directory
  aDir := Directory(cPath+"*.*","D")
  // Fix the file attribute entries in the resulting array
  if ! empty(aDir)
     aEval( aDir, { |d| d[F_ATTR] := ;
                    BittoC( FileAttr(cPath + d[F_NAME] ) , ;
                    "  ADVSHR") })
  endif
Also die XbToolsIII Funktion FileAttr(cPath + d[F_NAME] ) funktioniert, also offensichtlich ein Fehler in Xbase++ :!:
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: directory() gibt keine Attribute zurück ?

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:Hallo,
auf eine Message im Alaska-Forum - ich konnte es kaum glauben
ich habe Directory nochmals auf W98se und XP sp1 mit v1.9x ausprobiert
und keine Probleme.

In subdirectorys sind 907 *.MP3 versteut und er findet die alle ...
Auch kann ich es nicht nachvollziehen das das 5st Elemet kein "D"
enthält ... alles funktioniert bei mir.

Ich hatte mal sowas ähnliches als ich den "Indexdienst" bei XP abgeschaltet hatte ...

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: directory() gibt keine Attribute zurück ?

Beitrag von brandelh »

AUGE_OHR hat geschrieben:Auch kann ich es nicht nachvollziehen das das 5st Elemet kein "D" enthält ... alles funktioniert bei mir.
Bei mir finde ich alle Dateien und auch Verzeichnisse (wenn "D" angegeben ist), aber das Antwortarray enthält im Feld, das die Attribute enthalten sollte nur Blank !

Ist bei dir das 5. Arrayfeld mit A R D oder sonstwas gefüllt ?

Ich lasse gerade meine Platten für den Indexdienst indizieren um zu sehen ob sich was ändert.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Jimmy,

genau wie du geschrieben hast, nachdem der Indexdienst alles indiziert hat, werden die Attribute angezeigt.

Dennoch halte ich das geschilderte Verhalten für einen Fehler, denn die XbToolsIII zeigen, dass es möglich ist auch ohne Indexdienst die Attribute richtig anzuzeigen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: genau wie du geschrieben hast, nachdem der Indexdienst alles indiziert hat, werden die Attribute angezeigt.
es hat mich damals 2 Tage gekostet um "den" Zusammenhang als
Fehler zu lokalisieren ... wer kommt den schon darauf :)

ein anderer Effekt war, wenn ich mich richtig erinnere, das ich im
CMD Fenster unter Cl*pper keine "Longname" mehr hatte weil das
"~" fehlte also \PROGRA1 statt \PROGRA~1 ... das konnte nicht sein,
Cl*pper macht sowas nicht und dann ging die Suche los ...
Dennoch halte ich das geschilderte Verhalten für einen Fehler, denn die XbToolsIII zeigen, dass es möglich ist auch ohne Indexdienst die Attribute richtig anzuzeigen.
das sagt nur das es möglich ist. Problem scheint mir aber generell das
"Abschalten" des Festplatten "Indexdienst" zu sein auch wenn ich immer
noch nicht weiss wofür der nun wirklich gut sein soll (nutze kaum Explorer
oder die Win-Such Funktion sondern ALT-F7 in TC )

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

AUGE_OHR hat geschrieben:... des Festplatten "Indexdienst" zu sein auch wenn ich immer noch nicht weiss wofür der nun wirklich gut sein soll (nutze kaum Explorer oder die Win-Such Funktion sondern ALT-F7 in TC )
Also der Indexdienst soll die Suche nach Dateien beschleunigen ...
hauptsächlich beschäftigt er aber die Festplatten wenn er denkt wir brauchen sie nicht :x darum hatte ich diesen ja abgeschaltet ...
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hubert,

aus genau dem Grund ist das immer eine der ersten Punkte, die ich auf einem neuen Rechner abschalte.

Jan
Antworten