2016-06-09 1 views
0

Я хочу создать файл, используя (возможно) библиотеку Ruby's tempfile, однако я хочу, чтобы этот файл длился около 30 минут.Как создать временный файл и удалить его через определенное время

Например:

require 'tempfile' 

def create_tempfile 
    temp = Tempfile.new('file') 
    temp.write('test') 
    path = temp.path 
    strt_time = Time.now 
    end_time = Time.now - start_time 

    if strt_time - end_time <= 1800 
    temp.unlink 
    else 
    # do something to make the file last 30 minutes 
    end 
end 

Я не уверен, что выше будет делать что-либо, но он получает через точку. Итак, мой вопрос: есть ли способ, которым я могу иметь файл, будь то temp или текст, последний всего тридцать минут, а затем удаляться или стираться? В настоящее время я запускаю Windows 7

+0

'sleep (60 * 30)' будет делать это. Поместите его в отдельный поток, если у вас есть другие вещи, которые нужно сделать, пока вы ждете, когда файл будет удален, но, как пишет @Nabeel, «cron» - это путь сюда. –

+0

Зачем вам этот файл в течение 30 минут? Чего вы пытаетесь достичь? – spickermann

+0

@spickermann Я не могу сказать вам причину, по которой мне нужен файл в течение этого определенного времени, но могу сказать, что он связан с программой, которая копирует в буфер обмена, я хочу, чтобы файл был доступен в случае, если вы переписываете буфер обмена чем-то другим, если знаете, что я имею в виду? Уловка заключается в том, что информация _CANNOT BE CACHED OVERNIGHT_, поэтому мне нужна резервная копия на определенное количество времени, чтобы достичь того, что я хочу делать – HelloHelloHello

ответ

1

Это невозможно, если вы не хотите, чтобы скрипт Ruby запускался в течение 30 минут. Возможно, было бы легче сохранить файл в определенной папке (например, /tmp) и выполнить задание Cron, автоматически протирать файлы старше определенного времени.

+0

Я бы с удовольствием использовал работу 'cron', я, вероятно, должен был указать, что я Работает Winodws 7 – HelloHelloHello

+0

У Windows есть планировщик задач :), вы можете использовать любой скрипт по своему вкусу. Вот ссылка, которая может помочь: http://www.howtogeek.com/201930/how-to-automatically-delete-files-in-your-download-folder-on-a-schedule/. –

1

Tempfile documentation имеет этот пример, показывающий, как вызвать файл должен быть удален:

Явный близко

Когда объект Временный файл сборки мусора, или когда интерпретатор выезды с Ruby, связанный с ним временный файл автоматически удаляется. Это означает, что нет необходимости явно удалять Tempfile после использования, хотя это хорошая практика: явное удаление неиспользуемых Tempfiles может потенциально оставлять большое количество tempfiles в файловой системе, пока они не будут собраны в мусор. Существование этих временных файлов может затруднить определение нового имени файла Tempfile.

Поэтому всегда следует назвать разъединить или закрыть в обеспечении блоке, например:

file = Tempfile.new('foo') 
begin 
    ...do something with file... 
ensure 
    file.close 
    file.unlink # deletes the temp file 
end 

Вы можете использовать Timeout, чтобы заставить закрыть файл, либо вы могли sleep 60 * 30 после создания файла внутри блок begin.

+0

Запустил бы 'sleep 60 * 30' в одном потоке, чтобы моя программа оставалась бежать? Или есть способ, которым я мог бы запустить его в фоновом режиме? – HelloHelloHello