Reputation: 187
I'm just beginning to learn file IO with Ruby, and had a question about being able to use ::expand_path to direct to a path separate from where my program is running.
Here is what I essentially would like to be able to do, but this unfortunately does not work for me.
require 'openuri'
require 'fileutils'
if File.expand_path.exists?("~/newpathdir/")
File.expand_path.open("~/newpathdir/log.txt", "a+") {|f| f.write("#{Time.now} Directory is good. Returning...") } #If directory is present, does nothing
return
else
FileUtils.mkdir_p.expand_path("~/newpathdir/")
File.open("~/newpathdir/log.txt", "a+") {|f| f.write("#{Time.now} Directory not found. Creating...") } #If directory not found, writes to log
end
def writeLatestToFile
tweet_file = File.open("~/newpathdir/latest_tweet.txt", "a+") #Opens file
if tweet_file #Checks if file opened correctly
tweet_file.syswrite("#{@latest_tweet["ID"]}\n#{@latest_tweet["Tweet"]}") #Appends latest_command information to latest_command.txt
elsif
File.open("~/newpathdir/log.txt", 'a+') {|f| f.write("#{Time.now} Error opening tweet_file.txt") } #If error in opening file, writes to log
end
end
Any help is greatly appreciated.
Upvotes: 2
Views: 1826
Reputation: 336
Is this what you want?
require 'fileutils'
def append(path, message)
path = File.expand_path path
FileUtils.mkdir_p File.dirname(path)
File.open(path, "a+") {|f| f.write "#{message}\n" }
end
def log(path, message)
append(path, "#{Time.now} #{message}")
end
append('~/newpathdir/latest_tweet', "123456\nLatestTweet")
log('~/newpathdir/log', 'Hello world')
Maybe you should also try Logger
. Class: Logger (Ruby 1.9.3)
require 'logger'
require 'fileutils'
path = File.expand_path '~/newnewpathdir/tweets_logger.log'
FileUtils.mkdir_p File.dirname(path)
log = Logger.new(path)
log.debug('Hello world.')
log.info('Info message.')
log.error('Error message.')
Upvotes: 1