Ruby on rails 在Ruby中打开(';*.txt';)?

Ruby on rails 在Ruby中打开(';*.txt';)?,ruby-on-rails,ruby,rake,Ruby On Rails,Ruby,Rake,我有一个脚本,在其中我遍历一些目录并在那里创建文件,并在创建的文件中放入一些字符串。在我创建文件的目录中,存在一些其他文件,我希望打开这些文件并搜索一些特定字符串,以便将它们复制到我创建的文件中。此现有文件的扩展名为“.sln” 在我创建文件的那一刻,有没有一种简单的方法告诉Ruby打开现有的.sln文件并解析它。我想象的是: File.open('*.sln', 'r') 我试过这样的方法: sln_files = Dir.glob('*.sln', 'r') File.open(sln_f

我有一个脚本,在其中我遍历一些目录并在那里创建文件,并在创建的文件中放入一些字符串。在我创建文件的目录中,存在一些其他文件,我希望打开这些文件并搜索一些特定字符串,以便将它们复制到我创建的文件中。此现有文件的扩展名为“.sln”

在我创建文件的那一刻,有没有一种简单的方法告诉Ruby打开现有的.sln文件并解析它。我想象的是:

File.open('*.sln', 'r')
我试过这样的方法:

sln_files = Dir.glob('*.sln', 'r')
File.open(sln_files)
还有这个方法:

Dir["/path/to/search/**/*.sln"]
但它给出了文件的完整路径。我只需要文件名

有什么想法吗?我希望能够在
File.open方法中使用通配符

因此,我在一个已经存在的主题上找到了解决方案(使用Ruby从文件夹中获取所有文件的名称)。它是:


一个解决方案可能是

Dir.glob('*.sln').each do |filename|
  File.open(filename, 'r') do |file|
    # reading ...
  end
end
如果只需要第一个文件,或者确定只有一个文件,则可以创建帮助器方法

def with_open_file(pattern)
  filename = Dir.glob('*.sln').first
  File.open(filename, 'r') { |f| yield(f) }
end

with_open_file('*.sln') do |file|
  # reading ...
end

你不能那样使用通配符。Ruby和我使用过的所有其他语言一样,都需要一个明确的文件名。如果有多个文件要处理,我们将获取这些名称并循环它们。如果我们不知道文件的基本名称,只知道扩展名,我们必须搜索与该扩展名或模式匹配的文件,然后迭代生成的数组。@theTinMan这对我来说是一个典型的用例。例如,如果文件有时间戳,则需要某种通配符。如果文件有完整路径名,则应使用
file.basename
仅提取filename.ext。但是,事实上,这些都在Stack Overflow和internet中有很好的文档记录,并在这里进行了多次讨论。用例可能是这样的,但处理它的代码除了将通配符传递给
open
之外,还需要做些什么。它涵盖了问题中处理通配符的部分。由于引用了
File.open
,关于打开文件的部分显然已被涵盖。您好,我在“使用Ruby从文件夹中获取所有文件的名称”主题中找到了正确的解决方案
def with_open_file(pattern)
  filename = Dir.glob('*.sln').first
  File.open(filename, 'r') { |f| yield(f) }
end

with_open_file('*.sln') do |file|
  # reading ...
end