On 16 Dec 2004, at 10:37, The Weeg wrote:

> I wrote a pretty simple web scraping tool, and i'm having it organize
> the results into folders based upon search queries.  After six hundred
> or so of these folders are created, i get a bizarre, "too many files
> open" error(Errno::EMFILE).
>
> This is the line of code it crashes on:
> `mkdir #{foldername}`

This opens a file to recieve the shell's response, instead use 
Dir.mkdir or FileUtils.

> And the only time I ever open and close files in my program is in
> these few lines, but the program isn't crashing on these lines:
>
> fileTempFile = File.new(filePath + "full_" + fileName +
> ".html","w")
> fileTempFile.puts(response)
> fileLinkText = File.new(filePath + "relevant_" + fileName +
> ".txt","w")
> fileLinkText.puts(link + "\n" +
> match.to_s.gsub(/<.*?>/,"").gsub(/&[a-zA-Z0-9#]*?;/,''))
> fileLinkText.close
> fileTempFile.close

You should be using blocks here, to ensure the file is really closed.

match = match.to_s
match = match.gsub(/<.*?>/, "")
match = match.gsub(/&[a-zA-Z0-9#]*?;/, "")

link_text = "#{link}\n#{match}"

File.open "#{file_path}full_#{file_name}.html", "w" do |temp_file|
   temp_file.puts response
end

File.open "#{file_path}relevant_#{file_name}.txt", "w" do |link_file|
   link_file.puts link_text
end

> As you can see, the files are being opened and closed almost
> immediately.

If an exception is raised, your File may not be closed if you don't use 
the block form.

> Is there a different way I should be creating directories rather than
> through a shell command?

Dir.mkdir, and FileUtils has (I believe) mkpath as well.