Hi all,
I have a quick query. I am copying data from a hard drive into a folder
structure, however some of files have the same name and
therefore get overwritten by the most recent file with that name. I have
been using file.identical to establish if the files match and if they do
rename them with an incremental
number (file[1].txt, file[2].txt etc).
This is my identical code
if File.identical?(file, file)
dsFile = File.copy(file, ‘\Test’)
File.rename(dsFile, “#{fileBase}#{x}.#{ext}”)
else
File.copy(file, ‘\Test’)
end
This renames the file prior to copying, which is not what I want. I
basically want to copy files, if a file with the same name exists rename
it.
Many thanks
Stuart
2009/4/15 Stuart C. [email protected]:
if File.identical?(file, file)
Do you really want to compare “file” with itself?
dsFile = File.copy(file, '\\Test')
File.rename(dsFile, "#{fileBase}#{x}.#{ext}")
I see issues creeping up here, because you seem to rely on some script
internal counters for your renaming operation: you should rather look
into the directory and check whether a file with the given basename
does exist already and if so generate a new target name.
else
File.copy(file, ‘\Test’)
end
This renames the file prior to copying, which is not what I want. I
basically want to copy files, if a file with the same name exists rename
it.
Then why don’t you just create the target name and do the copy with
that?
Cheers
robert
Ok I must of misunderstood the docs for it, in reflection I am thinking
file.exist?
Also, Robert what do you mean by creating a target name?
Regards
Stuart
matt neuburg wrote:
Stuart C. [email protected] wrote:
Hi all,
I have a quick query. I am copying data from a hard drive into a folder
structure, however some of files have the same name and
therefore get overwritten by the most recent file with that name. I have
been using file.identical to establish if the files match
But that is not what File.identical? does. m.
On 17.04.2009 09:16, Stuart C. wrote:
Ok I must of misunderstood the docs for it, in reflection I am thinking
file.exist?
Also, Robert what do you mean by creating a target name?
You copy from source to target.
robert
I have stepped back from this code for a while and I am still stuck.
My thinking is
- read source data set
- if item in source matches criteria
- move that file to target if a file with that name doesnt already
exist in target
- if a file does exist with the same name in target rename the file
with a sequential number eg test[1].txt
- then move the file to target
This is the relevant code I have
Find.find(dir) do |path|
if File.extname(path) == “.txt”
sourceFile.push File.basename(path)
sourceFile.each do |source|
if File.file?(path) and File.basename(path) != source
File.move(path, culled)
elsif
File.move(path, temp)
File.rename(tmp, “tester.exe”)
File.move(temp, target)
end
end
end
end
This just doesn’t do anything, not even error.
Thanks in advance.
Robert K. wrote:
On 17.04.2009 09:16, Stuart C. wrote:
Ok I must of misunderstood the docs for it, in reflection I am thinking
file.exist?
Also, Robert what do you mean by creating a target name?
You copy from source to target.
robert
On 21.05.2009 14:01, Stuart C. wrote:
- then move the file to target
This is the relevant code I have
Find.find(dir) do |path|
if File.extname(path) == “.txt”
sourceFile.push File.basename(path)
sourceFile.each do |source|
This looks strange: you push to “sourceFile” and then iterate
“sourceFile” but never remove anything from “sourceFile”.
This just doesn’t do anything, not even error.
The code looks a bit weird to me but one thing is certain: there is a
lot of code missing (what is “culled”? how is “sourceFile” initialized
etc.). It is hard to give any recommendations that way.
Kind regards
robert
Stuart C. [email protected] wrote:
Hi all,
I have a quick query. I am copying data from a hard drive into a folder
structure, however some of files have the same name and
therefore get overwritten by the most recent file with that name. I have
been using file.identical to establish if the files match
But that is not what File.identical? does. m.