Re: [Windows] FileGetAttr reports faHidden on e.g. C:\
El 04/03/2015 a las 16:01, Bart escribió:
> Kind of off-topic.
> While working on Lazarus' TShellTreeView component, it was brought to
> my attention that FileGetAttr('C:\') returns an attribute that has
> faHidden in it.
> This is kind of unexpected.
> Well actually it reports $16: faDirectory + faHidden + faSysFile on
> Win7-64 (32-bit fpc)
> On Win98SE it reports $10: faDirectory.
> On Win7 FileGteAttr reports $16 on any path that is the root of a
> drive, unless it is a 'substituted" drive (subst X: path/to/folder).
> Does anybody know when this behaviour of Windows changed, and why?
That difference is between FAT and NTFS. In NTFS "C:\" is not a
directory, it is a drive and it also holds data references about the
media it contents. Of course it could be considered a folder but it can
not be used as a reparse point (like folders), you can not RMDIR it and
other differences. Also the path "C:\" refers to folder "C:" which
enters in conflict because "C:" is the notation for current process
folder not "C:\".
Resume, in Windows "[OneLetter]:\" is a drive which mostly works at 99%
as a folder, but it is not, and its attributes does not have the same
meaning as a regular folder and it should be operated as a drive concept
Side note: Programming of "FileExists" and "DirectoryExists" should be
changed (rethink, retest,...) in 32 bits Windows programs in a 64 bit
platform as GetFileAttributes does not perform the virtual aliasing like
"Program Files" -> "Program Files (x86)" and a call to "FileExists" (32
bits) could report that a file exists that could not be opened because
it exists in the one that "FileExists" can see but not in the one that
would "FileCreate" try to use.