File 'rb' on non-Windows

Discussion in 'Ruby' started by Jari Williamsson, Nov 9, 2007.

  1. To open binary files, on Windows the statement:
    File.new("myfile", "rb")
    is required.

    The docs just seem to say that the "b" is a Windows-only thing, not what
    happens on other platforms. Will the "b" flag just be filtered out on
    Linux/OS X?


    Best regards,

    Jari Williamsson
    Jari Williamsson, Nov 9, 2007
    #1
    1. Advertising

  2. Jari Williamsson wrote:
    > To open binary files, on Windows the statement:
    > File.new("myfile", "rb")
    > is required.
    >
    > The docs just seem to say that the "b" is a Windows-only thing, not what
    > happens on other platforms. Will the "b" flag just be filtered out on
    > Linux/OS X?
    >
    >
    > Best regards,
    >
    > Jari Williamsson


    On Windows files will usually have line breaks build by the sequence
    "\r\n". When reading such a file in normal mode, the "\r" will be
    deleted and not inside the String. When writing data to a file, each
    "\n" will be replaced by "\r\n".

    When using "rb" or "wb" on Windows, the data will be unchanged.

    On Linux/OS X the line break character in a file is "\n", so the "b"
    mode doesn't have any effect.

    Wolfgang Nádasi-Donner
    --
    Posted via http://www.ruby-forum.com/.
    Wolfgang Nádasi-Donner, Nov 9, 2007
    #2
    1. Advertising

  3. Jari Williamsson wrote:
    > To open binary files, on Windows the statement:
    > File.new("myfile", "rb")
    > is required.
    >
    > The docs just seem to say that the "b" is a Windows-only thing, not what
    > happens on other platforms. Will the "b" flag just be filtered out on
    > Linux/OS X?


    It is ignored on other platforms, yes.

    Regards,

    Dan
    Daniel Berger, Nov 9, 2007
    #3
  4. On Nov 9, 2007, at 10:59 AM, Daniel Berger wrote:

    > Jari Williamsson wrote:
    >> To open binary files, on Windows the statement:
    >> File.new("myfile", "rb")
    >> is required.
    >> The docs just seem to say that the "b" is a Windows-only thing, not
    >> what happens on other platforms. Will the "b" flag just be filtered
    >> out on Linux/OS X?

    >
    > It is ignored on other platforms, yes.
    >
    > Regards,
    >
    > Dan


    It's not "ignored", it just has no effect because there's no
    difference between "binary" mode and the default for Unix-like systems.

    -Rob

    Rob Biedenharn http://agileconsultingllc.com
    Rob Biedenharn, Nov 9, 2007
    #4
  5. Jari Williamsson

    7stud -- Guest

    Jari Williamsson wrote:
    > To open binary files, on Windows the statement:
    > File.new("myfile", "rb")
    > is required.
    >
    > The docs just seem to say that the "b" is a Windows-only thing, not what
    > happens on other platforms. Will the "b" flag just be filtered out on
    > Linux/OS X?
    >
    >


    1) Different os's use different characters for newlines.

    2) In Ruby, and other languages, when you read or write a file, ruby
    automatically converts all newlines from any os to: '\n'. That way,
    when you write a file, you can have your code write a '\n' to the file
    and ruby will take care of converting the '\n' to the proper newline for
    your system. Likewise, when you read a newline from a file, you can
    assume the newline is a '\n' because ruby will convert the actual
    newline to a '\n'. In other words, you can write code that assumes '\n'
    is the newline on any os--even though the actual newline for that os may
    be something else.

    3) When you open a file in binary mode, you are directing ruby *not* to
    do any newline conversions. That means you can no longer assume the
    newlines are '\n'. The newlines you read will be the actual newlines
    that are in the file. Similarly, you can no longer write a '\n' to the
    file and expect ruby to convert it to the proper newline for the os. In
    other words, what you read from a file is exactly what's in the file,
    and what you write to the file is exactly what's in your write or puts
    statement.

    4) Because newlines on unix are a '\n', ruby doesn't have to do any
    conversions when you read or write a text file in normal mode.
    Therefore, if you open a file in binary mode on a unix os, which tells
    ruby not to do any conversions, there is no difference. What you read
    from a file is exactly what's in the file, i.e. the newline in the file
    and what ruby returns to you as the newline are identical, and when you
    write a '\n' to the file, an actual '\n' gets written to the file.
    --
    Posted via http://www.ruby-forum.com/.
    7stud --, Nov 9, 2007
    #5
    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. Laszlo Szijarto
    Replies:
    0
    Views:
    402
    Laszlo Szijarto
    Jul 2, 2003
  2. Rhino
    Replies:
    14
    Views:
    7,472
    Chris Uppal
    Dec 14, 2005
  3. Les Caudle
    Replies:
    1
    Views:
    340
    Cowboy \(Gregory A. Beamer\)
    Sep 19, 2006
  4. Replies:
    5
    Views:
    368
  5. Andrew Ward
    Replies:
    2
    Views:
    1,037
    Zorro
    Jul 19, 2005
Loading...

Share This Page