El 04/03/2015 a las 16:01, Bart escribió:
Hi,
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?
Hello,

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 (no attributes).

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.

Jose Mejuto
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to