0

我必须通过几个请求从网上下载文件。每个请求的下载文件必须放在与请求编号同名的文件夹中。

例如:

我的脚本现在正在运行以下载请求号 87665 的文件。所以所有下载的文件都将放在目标文件夹Current Download\Attachment87665中。那么我该怎么做呢?

目标文件夹: Current Download已修复。只需要Attachmentxxxxxx动态创建,xxxxxx任何请求号的地方。

这是代码的 Python 版本: 但我希望它在 Ruby 中,仅供参考以了解我在寻找什么

request_number = 82673

# base dir
_dir = "D:\Current Download"       

# create dynamic name, like "D:\Current Download\Attachment82673"
_dir = os.path.join(_dir, 'Attachment%s' % request_number)

# create 'dynamic' dir, if it does not exist
if not os.path.exists(_dir):
    os.makedirs(_dir)
4

2 回答 2

2

使用Dir.mkdir("#{Rails.root}/#{whatever}/#{example.join('bla')}").
http://www.ruby-doc.org/core-1.9.3/Dir.html#method-c-mkdir

于 2013-01-10T04:48:46.233 回答
2

可以同时进行多个下载吗?如果是这样,您需要一些可以随机创建数字而不会发生冲突的东西。

看看 Ruby 的 Tempfile 模块,它是用来做你正在谈论的事情的,特别是open方法。

用于管理临时文件的实用程序类。当您创建一个 Tempfile 对象时,它将创建一个具有唯一文件名的临时文件。

require 'tempfile'

file = Tempfile.new('foo')
file.path      # => A unique filename in the OS's temp directory,
            #    e.g.: "/tmp/foo.24722.0"
            #    This filename contains 'foo' in its basename.
file.write("hello world")
file.rewind
file.read      # => "hello world"
file.close
file.unlink    # deletes the temp file

另请阅读有关“显式关闭”和“创建后取消链接”的文档。

无论您做什么,给定文件夹中存在的文件越多,系统或您的代码生成唯一文件名所需的时间就越长。

您也可以使用数据库来跟踪序列号。

并且,“生成唯一文件名”也谈到了这个问题,有很多解决方案。最好的可能是uuidgen在 *nix 系统上使用。

uuidgen 命令生成一个通用唯一标识符 (UUID),一个 128 位的值,保证在空间和时间上都是唯一的。

于 2013-01-10T06:26:32.603 回答