Forum: Ruby File::write() complement for File::read() ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bc368ef524130e8d0deb386de961e24a?d=identicon&s=25 Suraj Kurapati (snk)
on 2009-01-31 02:50
Hello,

Why is there not a complementary File::write() method to the
File::read() method?  It feels unbalanced to always write the following
code whereas it's so much easier to read a file:

  File.open(path, 'wb') {|f| f << content }

I would like to see this method in the core Ruby API, just as the
Symbol#to_proc() facets method has travelled into the core Ruby API.

Thanks for your consideration.
Bc368ef524130e8d0deb386de961e24a?d=identicon&s=25 Suraj Kurapati (snk)
on 2009-01-31 09:15
Allow me to rephrase my question:

It is currently easier to read whole files (via File::read) than to
write whole files (via File::open and passing in a block).  This
imbalance can be corrected by adding a File::write method, such as the
following, to the core Ruby API.

  def File.write path, data
    File.open(path, 'wb') {|f| f << data.to_s }
  end

Are there any plans to do this?  If not, where can I file a request for
such a change?

Thanks for your consideration.
Ef3aa7f7e577ea8cd620462724ddf73b?d=identicon&s=25 Rob Biedenharn (Guest)
on 2009-01-31 16:19
(Received via mailing list)
On Jan 31, 2009, at 3:16 AM, Suraj Kurapati wrote:

>
> Are there any plans to do this?  If not, where can I file a request
> for
> such a change?
>
> Thanks for your consideration.

$ fri File#write
--------------------------------------------------------------- IO#write
      ios.write(string)    => integer
------------------------------------------------------------------------
      Writes the given string to ios. The stream must be opened for
      writing. If the argument is not a string, it will be converted to
      a string using to_s. Returns the number of bytes written.

         count = $stdout.write( "This is a test\n" )
         puts "That was #{count} bytes of data"

      produces:

         This is a test
         That was 15 bytes of data


It's already there.  Do you ever just try these things?  This method
is an instance method.

Your method would be incomplete without a mode.  Do you want 'w', 'a',
'wb', etc.?

def your_write(path, data, mode='wb')
   File.open(path, mode) {|f| f.write data }
end

I don't know why you call #to_s on data if you open 'wb'.  (IO#write
does that for you if what you pass isn't a String.)

-Rob


Rob Biedenharn    http://agileconsultingllc.com
Rob@AgileConsultingLLC.com
+1 513-295-4739
Skype:  rob.biedenharn
Bc368ef524130e8d0deb386de961e24a?d=identicon&s=25 Suraj Kurapati (snk)
on 2009-01-31 18:53
Rob Biedenharn wrote:
> $ fri File#write
> [...]
> It's already there.  This method is an instance method.

I asked for a class method File::write (just like File::read) not an
instance method File#write.

> Your method would be incomplete without a mode.  Do you want 'w', 'a',
> 'wb', etc.?
>
> def your_write(path, data, mode='wb')
>    File.open(path, mode) {|f| f.write data }
> end

Good point.

> I don't know why you call #to_s on data if you open 'wb'.  (IO#write
> does that for you if what you pass isn't a String.)

Thanks for the tip.
Bc368ef524130e8d0deb386de961e24a?d=identicon&s=25 Suraj Kurapati (snk)
on 2009-01-31 21:48
Suraj Kurapati wrote:
> where can I file a request for such a change?

I filed this feature request on Ruby Issue Tracking System:

http://redmine.ruby-lang.org/issues/show/1081
This topic is locked and can not be replied to.