Coming from OS X, I’m used to protection to overwriting files. I have
the need for such protection. Before I write it myself is there a
standard method for this? I’d like it work like OS X where if a file of
the same name exists, the file to be copied gets an index number. For
example, existingFile.txt already is in the dest directory, and a file
of same name being copied becomes existingFile1.txt.
I don’t think even this newbie will find it difficult, but it seems with
all the File and FileUtil methods something like this woudd exist.
Thanks
2007/7/10, 12 34 [email protected]:
Coming from OS X, I’m used to protection to overwriting files. I have
the need for such protection. Before I write it myself is there a
standard method for this? I’d like it work like OS X where if a file of
the same name exists, the file to be copied gets an index number. For
example, existingFile.txt already is in the dest directory, and a file
of same name being copied becomes existingFile1.txt.
I don’t think even this newbie will find it difficult, but it seems with
all the File and FileUtil methods something like this woudd exist.
I believe IO::CREAT might do what you need. Try this
File.open(“foo”, IO::CREAT | IO::WRITE) do |io|
…
end
Kind regards
On Jul 9, 2007, at 11:26 PM, 12 34 wrote:
all the File and FileUtil methods something like this woudd exist.
Thanks
–
Posted via http://www.ruby-forum.com/.
You want to use the Dir class and File class.
using ri to check out these classes will give you lots of tools.
It’s not terribly different in any language, except in Ruby, it’s
easy to refactor your code into small readable functions (methods).
You might need a Regular Expression to split file extension and file
name before appending the number.
Once you have it working, expand its abilities by looking for
existing files with the same name and a number.
here’s a little pseudo code to set you in the right direction:
read directory into array
if file_name.exists? in directory_name
append number to new_file_name
end
write new_file_name to directory
Hi,
Am Dienstag, 10. Jul 2007, 13:26:14 +0900 schrieb 12 34:
Coming from OS X, I’m used to protection to overwriting files. I have
the need for such protection. Before I write it myself is there a
standard method for this? I’d like it work like OS X where if a file of
the same name exists, the file to be copied gets an index number. For
example, existingFile.txt already is in the dest directory, and a file
of same name being copied becomes existingFile1.txt.
class File
class <<self
def safe_open name
i = 0
n = name
begin
f = File.new n, File::CREAT|File::EXCL|File::WRONLY
yield f
rescue Errno::EEXIST
i += 1
n = “#{name}_#{i}”
retry
ensure
f.close
end
end
end
end
File.safe_open “some_file” do |f|
puts “Generated filename is: #{f.path}”
f.puts some_data
end
Bertram
On Jul 10, 2007, at 12:26 AM, 12 34 wrote:
all the File and FileUtil methods something like this woudd exist.
Try using File.flock method.
http://www.ruby-doc.org/core/classes/File.html#M002576
aRi
-------------------------------------------------------|
~ Ari
crap my sig won’t fit
Hi,
Am Dienstag, 10. Jul 2007, 22:03:52 +0900 schrieb Bertram S.:
retry
ensure
f.close
end
end
Sorry, this is wrong. The yield should not appear inside
the begin-rescue block as it could raise an exception
itself. Better is:
def safe_open name
i, n = 0, name
f = begin
File.new n, File::CREAT|File::EXCL|File::WRONLY
rescue Errno::EEXIST
i += 1
n = “#{name}_#{i}”
retry
end
yield f
ensure
f.close
end
Bertram