Newbie - open file permission denied

I am attempting to open a directory, open each file and send each line
of the file to a network host.
I can get the code to work for a single file, but the script fails with
a "permission denied" error when I attempt to do this for each file in a
directory.

*****CODE*****
IPADDR= "some ip address"
OUTPORT = "some ip port"
INDIR = "some directory"
dir = Dir.open(INDIR)
dir.each do |f|
file = File.open(f,"r")
streamSock = TCPSocket::new(IPADDR,OUTPORT)
while(line = file.gets)
streamSock.send(line,0)
end
streamSock.close
file.close
end
*****END CODE******
any help greatly appreciated

Thank you.

···

--
Posted via http://www.ruby-forum.com/.

Bob Smith wrote:

I am attempting to open a directory, open each file and send each line
of the file to a network host.
I can get the code to work for a single file, but the script fails with
a "permission denied" error when I attempt to do this for each file in a
directory.

*****CODE*****
IPADDR= "some ip address"
OUTPORT = "some ip port"
INDIR = "some directory"
dir = Dir.open(INDIR)
dir.each do |f|
file = File.open(f,"r")
streamSock = TCPSocket::new(IPADDR,OUTPORT)
while(line = file.gets)
streamSock.send(line,0)
end
streamSock.close
file.close
end
*****END CODE******
any help greatly appreciated

Thank you.

The filenames returned by dir.each are just filenames, not the complete paths. You may need to prepend the INDIR directory name to the filenames to get a complete path to open.

···

--
RMagick: http://rmagick.rubyforge.org/

Another possible option might be something like:

Dir.glob("#{INDIR}/*").each do |filename|
  File.open(filename, "r") do |file|
    #...
  end
end

glob does return the full path to the file.

Or, possibly something like this could work:

Dir.chdir(INDIR) do
  Dir.foreach(".") do |filename|
    #...
  end
end

···

On Wed, Dec 24, 2008 at 10:53 AM, Tim Hunter <TimHunter@nc.rr.com> wrote:

Bob Smith wrote:

I am attempting to open a directory, open each file and send each line
of the file to a network host...

dir = Dir.open(INDIR)
dir.each do |f|
file = File.open(f,"r")

The filenames returned by dir.each are just filenames, not the complete
paths. You may need to prepend the INDIR directory name to the filenames to
get a complete path to open.

unknown wrote:

Dir.glob("#{INDIR}/*").each do |filename|
  File.open(filename, "r") do |file|
    #...
  end
end

glob does return the full path to the file.

Thank you, the Dir.glob gets rid of the error.

···

--
Posted via http://www.ruby-forum.com/\.