无法读取名称中包含问号的文件

时间:2013-08-01 03:50:28

标签: ruby file

我有一个名称类似于/path/to/file/dir with spaces/mytiff-?.tif的文件。在irb中,我尝试以下两种方法:

open("/path/to/file/dir with spaces/mytiff-?.tif", 'rb')
File.open("/path/to/file/dir with spaces/mytiff-?.tif", 'rb') 

我收到了一个错误:

Errno::ENOENT: No such file or directory. 

我也尝试用字符串中的?替换\?

我正在使用ruby 2.0.0。文件是网络驱动器(CIFS),客户端是mac(狮子)。

更新

感谢您的帮助。问题仍未解决。

$ ls "/Volumes/rmrpp/MLP Library/Bridgland 1927 - North Saskatchewan/Stations/420/Repeat Masters/"                    
HIG2008_B27_420-100.tif HIG2008_B27_420-90.tif  HIG2008_B27_420-92.tif  HIG2008_B27_420-94.tif  HIG2008_B27_420-96.tif  HIG2008_B27_420-98.tif  HIG2008_B27_420-?.tif
HIG2008_B27_420-101.tif HIG2008_B27_420-91.tif  HIG2008_B27_420-93.tif  HIG2008_B27_420-95.tif  HIG2008_B27_420-97.tif  HIG2008_B27_420-99.tif
$ irb
1.9.3p194 :001 > t = File.open("/Volumes/rmrpp/MLP Library/Bridgland 1927 - North Saskatchewan/Stations/420/Repeat Masters/HIG2008_B27_420-?.tif",'rb'); nil
Errno::ENOENT: No such file or directory - /Volumes/rmrpp/MLP Library/Bridgland 1927 - North Saskatchewan/Stations/420/Repeat Masters/HIG2008_B27_420-?.tif
    from (irb):1:in `initialize'
    from (irb):1:in `open'
    from (irb):1
    from /Users/mlp/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
1.9.3p194 :002 > t = File.open("/Volumes/rmrpp/MLP Library/Bridgland 1927 - North Saskatchewan/Stations/420/Repeat Masters/HIG2008_B27_420-98.tif",'rb'); nil
 => nil 
1.9.3p194 :003 > t.size
 => 50124180 

如您所见,该文件存在(我在bash中列出它)。我进入irb并尝试将文件作为二进制文件读取。引用文件路径。它失败。我尝试从同一目录中的另一个文件,它的工作原理。

我认为@mu_is_too_short是正确的。也许是?根本不是问号。我能想到的唯一可行的解​​决方案是手动重命名带有神秘问号的文件。还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

只要该文件存在,打开这样的文件就没有问题:

folder_file = './temp directory/file-?.txt'
File.open(folder_file, 'r').close

这很好用。

请参阅Tin Man关于如何实际打开.tif文件的建议。

如您所见,我创建了以下文件myster-file_char?.txt

 $: ls
get_listing.rb  myster-file_char?.txt

您可以将其存储在变量中,但我只在此处使用Dir.glob进行查看。

puts Dir.glob("**.*").inspect

现在所有的东西都显示出它的特征。虽然我应该可以直接使用它来打开和编辑Ruby中的文件。虽然像The Tin Man说的那样,但你问的是二进制文件。

 $: ruby get_listing.rb 
["myster-file_char\u0016.txt", "get_listing.rb"]

实际存在的字符是 CTRL V 。希望这最终有助于解开这个谜团。