phobo's std.file is completely broke!

Vladimir Panteleev thecybershadow.lists at gmail.com
Wed Sep 19 06:26:21 UTC 2018


On Wednesday, 19 September 2018 at 05:49:41 UTC, Nick Sabalausky 
(Abscissa) wrote:
> [...]

Someone mentioned in this thread that .NET runtime does do the 
long-path workaround automatically. One thing we could do is copy 
EXACTLY what C# is doing.

The rationale being that:
- .NET is made by Microsoft
- The Windows API's filesystem implementation is made by Microsoft
- Given that these two are made by the same party, it's 
reasonable to assume that the .NET authors authoritatively "knew 
what they were doing" when implementing the workaround.
- The algorithm used by .NET is very likely to be supported by 
the API (even future implementations), as well as third-party 
implementations of the API.

However, there are still drawbacks to this:

- There is still the matter of overhead (one OS API call 
(GetCurrentDirectory) and at least one GC allocation (for the 
current directory buffer)).
- Using paths longer than MAX_PATH is an exceptional situation. 
Putting the workaround in the main code path penalizes 99.9% of 
use cases.
- The registry switch in newer Windows versions removes the need 
for this workaround, so systems with it enabled are penalized as 
well.
- There is still the matter regarding special filenames, as well 
as whether the expected behavior is really to succeed and create 
paths inaccessible to most software, instead of failing.



More information about the Digitalmars-d mailing list