Newbie - open file permission denied

B

Bob Smith

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

Tim Hunter

Bob said:
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.
 
B

brabuhr

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.

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
 
B

Bob Smith

unknown said:
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.
 

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,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top