Cross-platform Home Directory?

Discussion in 'Ruby' started by Trans, Sep 13, 2007.

  1. Trans

    Trans Guest

    I have a little app that needs to store session data. I assume the
    best place to store it is in one's home directory, but I need this app
    to be cross-platform. I glanced through all rbconfig.rb's
    Config::CONFIG settings but did not see anything for it. How does one
    access a cross-platform home directory?

    Thanks,
    T.
     
    Trans, Sep 13, 2007
    #1
    1. Advertising

  2. Trans wrote:
    > I have a little app that needs to store session data. I assume the
    > best place to store it is in one's home directory, but I need this app
    > to be cross-platform. I glanced through all rbconfig.rb's
    > Config::CONFIG settings but did not see anything for it. How does one
    > access a cross-platform home directory?


    This is one way of guessing:

    case RUBY_PLATFORM
    when /win32/
    ENV['APPDATA'] ||
    ENV['USERPROFILE'] ||
    ENV['HOME']

    else
    ENV['HOME'] ||
    File.expand_path('~')
    end

    Typical values:

    ENV['APPDATA'] == "C:\Documents and Settings\username\Application Data"
    ENV['USERPROFILE'] == "C:\Documents and Settings\username"

    (This is from my 'preferences' lib.)

    I have no idea what is right on OS X. I'm sure someone has thought this
    through in more detail...

    --
    vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
     
    Joel VanderWerf, Sep 13, 2007
    #2
    1. Advertising

  3. On Sep 13, 1:37 pm, Joel VanderWerf <> wrote:
    > Trans wrote:
    > > I have a little app that needs to store session data. I assume the
    > > best place to store it is in one's home directory, but I need this app
    > > to be cross-platform. I glanced through all rbconfig.rb's
    > > Config::CONFIG settings but did not see anything for it. How does one
    > > access a cross-platform home directory?

    >
    > This is one way of guessing:


    <snip>

    I think the appdata directory is where you want it for MS Windows. You
    can use win32-dir, since the environment variable may not be defined:

    when /mswin/
    require 'win32/dir'
    Dir::APPDATA

    Regards,

    Dan
     
    Daniel Berger, Sep 13, 2007
    #3
  4. On 9/13/07, Glen Holcomb <> wrote:
    > On 9/13/07, Glen Holcomb <> wrote:
    > >
    > > On 9/13/07, Trans <> wrote:
    > > >
    > > > I have a little app that needs to store session data. I assume the
    > > > best place to store it is in one's home directory, but I need this app
    > > > to be cross-platform. I glanced through all rbconfig.rb's
    > > > Config::CONFIG settings but did not see anything for it. How does one
    > > > access a cross-platform home directory?
    > > >
    > > > Thanks,
    > > > T.



    Rubygems has a method for finding this:

    C:\>irb -rubygems
    >> Gem.user_home

    => "C:\\Documents and Settings\\gthiesfeld"
     
    Gordon Thiesfeld, Sep 13, 2007
    #4
  5. Hi,

    At Fri, 14 Sep 2007 04:19:04 +0900,
    Trans wrote in [ruby-talk:268970]:
    > I have a little app that needs to store session data. I assume the
    > best place to store it is in one's home directory, but I need this app
    > to be cross-platform. I glanced through all rbconfig.rb's
    > Config::CONFIG settings but did not see anything for it. How does one
    > access a cross-platform home directory?


    There is no static value.

    FYI, in 1.9, if ENV["HOME"] isn't set, it will be set to
    1) ENV["HOMEDRIVE"] + ENV["HOMEPATH"]
    2) ENV["USERPROFILE"] or
    3) "Personal" special folder
    in the above order.

    --
    Nobu Nakada
     
    Nobuyoshi Nakada, Sep 14, 2007
    #5
  6. Trans

    Une Bévue Guest

    Joel VanderWerf <> wrote:

    > I have no idea what is right on OS X.


    ENV[ 'HOME' ]

    for example my "home" is :

    /Users/yt

    (never tried the File.expand_path('~') ) BUT on Mac OS X shell ~ expand
    to home.

    also i worry about the way win* representent pathes with \

    does that means that, in ruby, there is no platform-independant way to
    representant pathes, as, for example in Java ?
    --
    La politique est l'art d'empécher les gens
    de se méler de ce qui les regarde.
    Paul Valéry
     
    Une Bévue, Sep 14, 2007
    #6
  7. Trans

    Phil Guest


    > -----Original Message-----
    > From: "Une B=E9v" "ue" =

    [mailto:]
    > Sent: Friday, September 14, 2007 7:20 AM
    > To: ruby-talk ML
    > Subject: Re: Cross-platform Home Directory?
    >=20
    > does that means that, in ruby, there is no platform-independant way to
    > representant pathes, as, for example in Java ?



    8:31:09.25 C:\Users\CynicalRyan
    >ls gems.txt

    gems.txt

    8:31:14.01 C:\Users\CynicalRyan
    >irb --simple-prompt
    >> File.open("c:/Users/CynicalRyan/gems.txt")

    =3D> #<File:c:/Users/CynicalRyan/gems.txt>

    >ruby -v

    ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

    >ver


    Microsoft Windows [Version 6.0.6000]

    --
    Phillip Gawlowski
     
    Phil, Sep 14, 2007
    #7
  8. Trans a écrit :
    > I have a little app that needs to store session data. I assume the
    > best place to store it is in one's home directory, but I need this app
    > to be cross-platform. I glanced through all rbconfig.rb's
    > Config::CONFIG settings but did not see anything for it. How does one
    > access a cross-platform home directory?
    >
    > Thanks,
    > T.
    >

    This is how I do this :
    home_directory = Dir.chdir {|path| path}

    The doc for Dir.chdir says that without argument, this method looks for
    environnement variables HOME or LOGDIR. And with a block, the directory
    is changed only inside the block, and restored right after.

    --
    Olivier Renaud
     
    Olivier Renaud, Sep 14, 2007
    #8
  9. Trans

    micathom Guest

    > case RUBY_PLATFORM
    > when /win32/
    > ENV['APPDATA'] ||
    > ENV['USERPROFILE'] ||
    > ENV['HOME']


    As HOME usually isn't set on windows, the existence of the variable
    could indicate that the user would like to override the windows
    default. I would thus check for HOME first.

    Also, under cygwin ruby all three variables are set, but APPDATA and
    USERPROFILE are "inherited" from the windows environment and are by
    default set as Windows path while HOME usually is set as cygwin path.
    In certain situations, this could cause certain difficulties, eg when
    calling external programs.

    It seems the trick with chdir doesn't work when neither HOME nor
    LOGDIR is set -- as it is usually the case under Windows, I think.
     
    micathom, Sep 14, 2007
    #9
  10. Trans wrote:
    > I have a little app that needs to store session data. I assume the
    > best place to store it is in one's home directory


    Everyone's helped you with ways to find the home directory, but on Windows
    this is not normally the right place to store session data. That's what
    Application Data is for. Make a directory under there for your application.
    Configuration data (user-modifiable but less frequently-changing) may be
    stored in the registry.

    The Windows certification documents describe where you should put stuff.

    Clifford Heath.
     
    Clifford Heath, Sep 15, 2007
    #10
  11. Trans

    Phil Guest


    > -----Original Message-----
    > From: Clifford Heath [mailto:]
    > Sent: Saturday, September 15, 2007 6:25 AM
    > To: ruby-talk ML
    > Subject: Re: Cross-platform Home Directory?



    > Everyone's helped you with ways to find the home directory, but on
    > Windows this is not normally the right place to store session data.
    > That's what Application Data is for. Make a directory under there for your
    > application. Configuration data (user-modifiable but less

    frequently-changing)
    > may be stored in the registry.


    ENV["APPDATA"] produces the Application Data directory. Best to use that:
    >> ENV["APPDATA"]

    => "C:\\Users\\CynicalRyan\\AppData\\Roaming"
    >> exit


    Since it is in a different location from Windows XP in Vista (the above path
    is a Vista path).

    > The Windows certification documents describe where you should put
    > stuff.


    Are these available on MSDN?

    --
    Phillip Gawlowski
     
    Phil, Sep 15, 2007
    #11
  12. Trans

    Trans Guest

    There's much more to this then I ever imagined. Thanks for all the
    answers, certainly enough to here to go on. Thanks.

    T.

    P.S. Seems like Launchy could use this functionality --maybe merge the
    Platform gem to make a strong single lib rather than two separate libs
    -- just a thought.
     
    Trans, Sep 16, 2007
    #12
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. john
    Replies:
    4
    Views:
    678
    Jim Higson
    Jun 15, 2006
  2. Nazgob

    cross platform directory scanning

    Nazgob, Jul 31, 2005, in forum: C Programming
    Replies:
    4
    Views:
    512
    Alexei A. Frounze
    Jul 31, 2005
  3. nancyflorida
    Replies:
    0
    Views:
    336
    nancyflorida
    Nov 12, 2007
  4. Metallicow
    Replies:
    10
    Views:
    204
    Chris Angelico
    Jul 12, 2013
  5. Piotr Dobrogost
    Replies:
    9
    Views:
    93
    Piotr Dobrogost
    Feb 21, 2014
Loading...

Share This Page