【问题标题】:No such file or directory @ rb_sysopen -没有这样的文件或目录@rb_sysopen -
【发布时间】:2020-12-08 10:45:46
【问题描述】:

我想解决这个错误。

没有这样的文件或目录@rb_sysopen - zipUpTest/1051687701.jpg

以下是源代码。

        Zip::File.open_buffer(obj) do |zip|

          zip.each do |entry|
            ext = File.extname(entry.name)
            file_name = File.basename(entry.name)

            next if ext.blank? || file_name.count(".") > 1

            dir = File.join(dir_name, File.dirname(entry.name))

            FileUtils.mkpath(dir.to_s)

            zip.extract(entry, entry.name) {true}

            file_name.force_encoding("UTF-8")
            file_new_name = "#{dir_name}/#{file_name}"

            File.rename(entry.name, file_new_name)

            @input_dir << file_new_name
          end
        end
      end
      Zip::OutputStream.open(zip_file.path) do |zip_data|
        @input_dir.each do |file|
          zip_data.put_next_entry(file)
          zip_data.write(File.read(file.to_s))
        end
      end

也就是说没有文件,这个问题怎么处理?

【问题讨论】:

  • 检查路径并重试?尝试使用完整路径?
  • 该异常发生在哪一行?
  • @tadman zip.extract(entry, entry.name) {true}这部分有一个例外。我不确定如何详细指定文件路径...

标签: ruby-on-rails ruby


【解决方案1】:

您必须确保文件zipUpTest/1051687701.jpg 存在于相对于进程运行的位置,而不是程序的保存位置。

例如,假设您的程序是/home/taizo/program。如果你在/home/taizo 并运行ruby program,那么它将寻找/home/taizo/zipUpTest/1051687701.jpg。如果您在/tmp 并运行ruby /home/taizo/program,程序将寻找/tmp/zipUpTest/1051687701.jpg

【讨论】:

  • 我明白了,这意味着您需要明确指定文件路径。顺便说一句,它现在可以在这个源代码中使用。 entry.name → 目录 + ".txt" || ".jpg" || “.csv” zip.extract(entry, dir + ".txt" || ".jpg" || ".csv") {true} File.rename(dir + ".txt" || ".jpg" || ".csv", new_file_name)
  • @taizo dir + ".txt" || ".jpg" || ".csv" 只是dir + ".txt"
  • 看来我在写无用的代码。谢谢你的建议。
猜你喜欢
  • 2014-05-14
  • 2015-05-14
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 2014-07-09
  • 2018-05-01
  • 2019-03-22
  • 1970-01-01
相关资源
最近更新 更多