我有一个名称类似于/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是正确的。也许是?根本不是问号。我能想到的唯一可行的解决方案是手动重命名带有神秘问号的文件。还有其他想法吗?
答案 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 。希望这最终有助于解开这个谜团。