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

S

Suraj Kurapati

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.
 
S

Suraj Kurapati

Allow me to rephrase my question:

It is currently easier to read whole files (via File::read) than to
write whole files (via File::eek:pen 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.
 
R

Rob Biedenharn

Allow me to rephrase my question:

It is currently easier to read whole files (via File::read) than to
write whole files (via File::eek:pen 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.

$ 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
(e-mail address removed)
+1 513-295-4739
Skype: rob.biedenharn
 
S

Suraj Kurapati

Rob said:
$ 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.
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top