2016-06-09 6 views
0

Ich möchte eine Datei mit (möglicherweise) Ruby tempfile Bibliothek erstellen, aber ich möchte diese Datei etwa 30 Minuten dauern.Wie kann ich eine temporäre Datei erstellen und nach einer bestimmten Zeit löschen

Zum Beispiel:

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 

Ich bin nicht sicher, dass die oben wird alles tun, aber es wird den über Punkt. Also meine Frage ist, gibt es eine Möglichkeit, ich kann eine Datei haben, sei es temp oder Text, zuletzt nur dreißig Minuten, und dann gelöscht oder gelöscht werden? Derzeit verwende ich Windows 7

+0

'Schlaf (60 * 30)' wird das tun. Lege es in einen separaten Thread, wenn du andere Dinge zu tun hast, während du darauf wartest, dass die Datei gelöscht wird, aber wie @Nabeel sagt, ist "cron" der richtige Weg. –

+0

Warum brauchst du diese Datei 30 Minuten lang? Was versuchst du zu erreichen? – spickermann

+0

@spickermann Ich kann dir eigentlich nicht den Grund nennen, warum ich die Datei für diese bestimmte Zeit brauche, aber ich kann dir sagen, dass es mit einem Programm zu tun hat, das in die Zwischenablage kopiert, ich möchte, dass die Datei zugänglich ist für den Fall, dass Sie die Zwischenablage mit etwas anderem überschreiben, wenn Sie wissen, was ich meine? Der Haken ist, dass die Information _CANNOT Cached OVERNIGHT_ ist, also brauche ich ein Backup für eine bestimmte Zeit, um zu erreichen, was ich tun möchte – HelloHelloHello

Antwort

1

Dies ist nicht möglich, es sei denn, Sie möchten das Ruby-Skript für 30 Minuten ausführen. Es ist möglicherweise einfacher, die Datei in einem bestimmten Ordner zu speichern (z. B. /tmp), und ein Cron-Job löscht automatisch Dateien, die älter als eine bestimmte Zeit sind.

+0

Ich würde gerne einen 'Cron'-Job verwenden, hätte ich wahrscheinlich angegeben, dass ich bin laufen Winodws 7 – HelloHelloHello

+0

Windows hat einen Task-Scheduler :), können Sie jedes Skript Ihrer Wahl aufrufen. Hier ist ein Link, der helfen könnte: http://www.howtogeek.com/201930/how-to-automatisch-delete-files-in-your-download-folder-on-a-schedule/. –

1

Die Tempfile documentation hat dieses Beispiel zeigt, wie eine Datei verursachen gelöscht werden:

Explicit schließen

Wenn ein Tempfile Objekt wird Müll gesammelt, oder wenn das Ruby-Interpreter beendet wird, die damit verbundene temporäre Datei wird automatisch gelöscht. Das bedeutet, dass es nicht notwendig ist, eine Temp-Datei nach der Verwendung explizit zu löschen, obwohl dies eine gute Vorgehensweise ist: Nicht explizit gelöschte Temp-Dateien können möglicherweise große Mengen von Temp-Dateien im Dateisystem zurücklassen, bis sie nicht mehr gesammelt werden. Das Vorhandensein dieser temporären Dateien kann die Bestimmung eines neuen Tempfile-Dateinamens erschweren.

Daher soll man immer anrufen oder entkoppeln Nähe in einem Block gewährleisten, wie folgen aus:

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

Sie ein Timeout nutzen könnte, um die Nähe der Datei zu erzwingen, oder man kann sleep 60 * 30 nach der Datei in der Erstellung der begin Block.

+0

Würde die Ausführung von "sleep 60 * 30" in einem einzigen Thread mein Programm zwingen, weiter zu laufen? Oder gibt es eine Möglichkeit, dass ich es im Hintergrund laufen lassen könnte? – HelloHelloHello

Verwandte Themen