File::exists?( "filename with a blank in it" )

Newbie here/

Consider

IMAGEMAGICK_EXE_PATH = ‘“f:\Program
Files\ImageMagick-6.5.8-Q16\convert.exe”’

(rdb:2) File::exists?( IMAGEMAGICK_EXE_PATH )
false

What’s the right way to test if a file name which has a blank in it
exists?

On Tue, 12 Jan 2010, Ralph S. wrote:

Newbie here/

Consider

IMAGEMAGICK_EXE_PATH = ‘“f:\Program Files\ImageMagick-6.5.8-Q16\convert.exe”’

The issue isn’t so much that you have a blank in it as that you’ve added
an extra set of quotes – in the example above, your filename has double
quotes at the beginning and end. Drop the double quotes and it should
work fine, assuming the path is correct.

Matt

On Jan 11, 2010, at 1:30 PM, Ralph S. wrote:

What’s the right way to test if a file name which has a blank in it
exists?

Well, probably to NOT put the quotes into the filename.

IMAGEMAGICK_EXE_PATH = ‘f:\Program Files\ImageMagick-6.5.8-Q16
\convert.exe’
or
IMAGEMAGICK_EXE_PATH = ‘f:/Program Files/ImageMagick-6.5.8-Q16/
convert.exe’
(yes, Ruby’s File class will work just fine with / as the directory
separator even on Windows.)

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

On Jan 11, 2010, at 2:50 PM, Ralph S. wrote:

added

What’s the best Ruby-esque way to stip out surrounding double quotes
if
they exist?

And ,yes, your example and Rob B.'s example both work.

Thank you to both.

Well, perhaps you’re thinking of the quotes that are needed/used to
supply a path containing spaces to a command-line program.

In any case, you could remove quotes with:

def unquote(string)
string.sub(/\A(['"])(.*)\1\z/, ‘\2’)
end

unquote(IMAGEMAGICK_EXE_PATH)

irb> IMAGEMAGICK_EXE_PATH = ‘“f:\Program Files\ImageMagick-6.5.8-
Q16\convert.exe”’
=> “"f:\Program Files\ImageMagick-6.5.8-Q16\convert.exe"”

Note that the canonical representation of the string makes the
included double-quotes obvious.

irb> def unquote(string)
irb> string.sub(/\A(['"])(.*)\1\z/, ‘\2’)
irb> end
=> nil
irb> unquote(IMAGEMAGICK_EXE_PATH)
=> “f:\Program Files\ImageMagick-6.5.8-Q16\convert.exe”

Compare this result to the value of IMAGEMAGICK_EXE_PATH itself above.

irb> unquote(unquote(IMAGEMAGICK_EXE_PATH))
=> “f:\Program Files\ImageMagick-6.5.8-Q16\convert.exe”

And this is save against a path without quotes, too.

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

Matthew K. Williams wrote:

On Tue, 12 Jan 2010, Ralph S. wrote:

Newbie here/

Consider

IMAGEMAGICK_EXE_PATH = ‘“f:\Program Files\ImageMagick-6.5.8-Q16\convert.exe”’

The issue isn’t so much that you have a blank in it as that you’ve added
an extra set of quotes – in the example above, your filename has double
quotes at the beginning and end. Drop the double quotes and it should
work fine, assuming the path is correct.

Matt

Isn’t a Windows pathname with surrounding double quotes a valid
pathname?!?!?

What’s the best Ruby-esque way to stip out surrounding double quotes if
they exist?

And ,yes, your example and Rob B.'s example both work.

Thank you to both.

On Jan 11, 3:30 pm, Ralph S. [email protected] wrote:

Newbie here/

Consider

IMAGEMAGICK_EXE_PATH = ‘“f:\Program Files\ImageMagick-6.5.8-Q16\convert.exe”’

(rdb:2) File::exists?( IMAGEMAGICK_EXE_PATH )
false

What’s the right way to test if a file name which has a blank in it exists?

For double quotes: use double backlashes:

“F:\Program Files\ImageMagick…”

For single quotes, it can work as is.

I recommendation also is ensure all the paths are expanded with
File.expand_path, which is going to ensure forward slashes are used
instead.

Ralph S. wrote:

Isn’t a Windows pathname with surrounding double quotes a valid
pathname?!?!?

The quotes are not part of the file-name.

When one enters
type “foo bar”
at the DOS-prompt, the quotes serve to indicate that there
is one file named
foo bar
and not two files named
foo
and
bar

If you enter
dir foo*
you will see
foo bar
not
“foo bar”

The quotes are not part of the file-name.

W. James wrote:

Ralph S. wrote:

Isn’t a Windows pathname with surrounding double quotes a valid
pathname?!?!?

If you enter
dir foo*
you will see
foo bar
not
“foo bar”

The quotes are not part of the filename.

Yes, you are quite right