Proposal for std.path replacement

Nick Sabalausky a at a.a
Fri Mar 4 05:07:44 PST 2011


"Regan Heath" <regan at netmail.co.nz> wrote in message 
news:op.vrtj9iz454xghj at puck.auriga.bhead.co.uk...
> On Fri, 04 Mar 2011 10:13:04 -0000, Nick Sabalausky <a at a.a> wrote:
>> "Lars T. Kyllingstad" <public at kyllingen.NOSPAMnet> wrote in message
>> news:ikqabr$796$4 at digitalmars.com...
>>>
>>>>
>>>> - Windows *does* have a concept of a home dir, so maybe tilde should be
>>>> expanded even on Windows. Only problem though is that Windows has *two*
>>>> main home dirs for each user: %HOMEPATH% for user-created files and
>>>> %APPDATA% for application data. (And some others, but I don't think any
>>>> of the others are appropriate for "~") So maybe there should be these
>>>> three:
>>>>
>>>>         1. expandTilde: Exactly as it is now: expands ~ on posix, no-op
>>>>         on
>>>> windows.
>>>>
>>>>         2. expandHomeDir: On posix: Expands "~" and "%HOMEDIR%" to the
>>>> user's home directory. On windows: Expands "~" and "%HOMEDIR%" to
>>>> whatever %HOMEDIR% is set to.
>>>>
>>>>         3. expandAppDataDir: On posix: Expands "~" and "%APPDATA%" to
>>>>         the
>>>> user's home directory. On windows: Expands "~" and "%APPDATA%" to
>>>> whatever %APPDATA% is set to.
>>>
>>> On POSIX you expect to be able to use ~ anywhere you're asked to input a
>>> path/filename.  Is this the case on Windows?  Can you write %HOMEDIR%
>>> \report.doc in Word's "Open" dialog, for instance?
>>>
>>
>> No, it's just an environment variable.
>
> Actually, you can.  I just tried Textpad and Word 2010 and both accepted 
> me typing:
>
> %HOMEDRIVE%%HOMEPATH%\ (at this point they both bring up suggestions)
> %APPDATA%\ (at this point they both bring up suggestions)
>
> FYI.. my environment variables are:
>
> APPDATA=C:\Users\rheath.<domain>\AppData\Roaming
> HOMEDRIVE=C:
> HOMEPATH=\Users\rheath.<domain>
>
> I don't have HOMEDIR, .. this is on Windows 7 x64 BTW.
>

Oh, you're right. It's the same for me on XP. I must have misread the doc 
page: There is no %HOMEDIR%, that's why it didn't work when I tried it in 
notepad. The correct thing is %HOMEDRIVE%%HOMEPATH%. That works for me, and 
so does %APPDATA%.


>> In fact, it seems that % is a valid
>> filename character (I wouldn't have even guessed that), so expanding any 
>> of
>> the %BLAH% stuff in std.path is probably a bad idea after all.
>
> Not necessarily, but it might require a bit more double-checking, for 
> example..
>
> If you type the following at command prompt you get an error.
> copy con test%HOMEDRIVE%.txt
>
> "The filename, directory name, or volume label syntax is incorrect."
>
> Because %HOMEDRIVE% is expanded to C: and testC:.txt is invalid.
>
> But these both work:
> copy con test%HOMEDRIVE.txt (missing 2nd %)
> copy con test%HOMEDRIV%.txt (non-existant envvar)
>
> In the latter case you actually get a file named "test%HOMEDRIV%.txt", it 
> hasn't attempted to replace the non-existant envvar with a blank string, 
> as that would result in "test.txt".
>

FWIW, I just did a little test to see if the substitution is being done by 
the commandline itself or by the command being run. Seems to be the 
commandline itself doing the substitution. Make a little echo program in D:

import std.stdio;
void main(string[] args) {
    writeln(args[1]);
}

>dmd main.d
>main %APPDATA%
C:\Documents and Settings\Nick Sabalausky\Application Data

Next thing to test would be the file I/O API. I'm wondering if passing 
"%APPDATA%" directly to the file I/O routines would be taken literally or 
get automatically expanded. I would think it would be taken literally, but 
with all the magic that windows does, I'm not so sure. Don't have time to 
test it at the moment.





More information about the Digitalmars-d mailing list