Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2015-03

[Windows] FileGetAttr reports faHidden on e.g. C:\

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Bart

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?

Bart

Reply by email

José Mejuto
to Bart
Bart wrote 12 lines
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

Reply by email