为什么File.exist找不到文件

时间:2015-12-09 10:27:22

标签: ruby

我有一个像这样的工作目录:

sascha@sascha-desktop:~/Musik/RMB/Youtube-Music$ ls -la
insgesamt 46456
drwxrwxr-x 2 sascha sascha     4096 Dez  9 10:32 .
drwxrwxr-x 3 sascha sascha     4096 Dez  6 22:47 ..
-rw-rw-r-- 1 sascha sascha 20751305 Apr 22  2015 RMB - Spring-dJl7zWZYj-E.mp4
-rw-rw-r-- 1 sascha sascha  6051641 Apr 22  2015 RMB - Spring.m4a
-rw-rw-r-- 1 sascha sascha 20751305 Apr 22  2015 RMB - Spring.mp4

在我的Ruby程序中,我有两种方法:

def self.rename(title)
    filename = title.to_s
    ext = file_exist_ogg_m4a(filename)
    filenamenew0 = filename.gsub(/ /, '_')
    pattern = /[a-zA-Z0-9\-\s\_]/
    filenamenew = filenamenew0.split(//).keep_if do |chr|
      chr =~ pattern
    end.join
    puts 'Renaming the downloaded file'
    puts "Filename: #{filename}" # debug
    puts "Filenamenew: #{filenamenew}" # debug
    puts "Extension: #{ext}" # debug
    puts Dir.pwd # debug
    #FileUtils.mv("#{filename}.#{ext}", "#{filenamenew}.#{ext}")
    #[filenamenew, filename]
end

def self.file_exist_ogg_m4a(filename)
    puts 'Accessing file_exist_ogg_m4a'
    puts Dir.pwd # debug
    if File.exist?("#{filename}.ogg")
      ext = 'ogg'
    elsif File.exist?("#{filename}.m4a")
      ext = 'm4a'
    elsif File.exist?("#{filename}.webm")
      ext = 'webm'
    end
    puts ext # debug
    puts 'Closing file_exist_ogg_m4a'
    return ext # debug
  end

我通过file_exist_ogg_m4a方法获得扩展名。

通过运行程序,它给了我:

Accessing file_exist_ogg_m4a
/home/sascha/Musik/RMB/Youtube-Music

Closing file_exist_ogg_m4a
Renaming the downloaded file
Filename: RMB - Spring
Filenamenew: RMB_-_Spring
Extension: 
/home/sascha/Musik/RMB/Youtube-Music

所以看起来我在正确的目录中,应该找到#{filename} .m4a,并且ext变量应该包含“m4a”。 但是,如果我正在寻找正在运行的方法“重命名”,那么我看起来就像一个空的#{ext}。

如果我正在使用该代码,则会找到一个m4a文件:

dir = Dir.pwd
if !Dir.glob("#{dir}/*.ogg").empty?
  ext = 'ogg'
elsif !Dir.glob("#{dir}/*.m4a").empty?
  ext = 'm4a'
elsif !Dir.glob("#{dir}/*.webm").empty?
  ext = 'webm'
end

所以我认为它与字符串“filename”有关。 也许有人有想法?

1 个答案:

答案 0 :(得分:0)

File.exist?与当前脚本目录相关,而不是与Dir的内部相关。有人可能会使用:

File.exist?(File.join Dir.pwd, "#{filename}.ogg")

以实现所请求的功能。