HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Ruby27-x64/share/doc/ruby/html/Tempfile.html
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">

<title>class Tempfile - RDoc Documentation</title>

<script type="text/javascript">
  var rdoc_rel_prefix = "./";
  var index_rel_prefix = "./";
</script>

<script src="./js/navigation.js" defer></script>
<script src="./js/search.js" defer></script>
<script src="./js/search_index.js" defer></script>
<script src="./js/searcher.js" defer></script>
<script src="./js/darkfish.js" defer></script>

<link href="./css/fonts.css" rel="stylesheet">
<link href="./css/rdoc.css" rel="stylesheet">




<body id="top" role="document" class="class">
<nav role="navigation">
  <div id="project-navigation">
    <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2>
    <a href="./index.html" rel="home">Home</a>
  </h2>

  <div id="table-of-contents-navigation">
    <a href="./table_of_contents.html#pages">Pages</a>
    <a href="./table_of_contents.html#classes">Classes</a>
    <a href="./table_of_contents.html#methods">Methods</a>
  </div>
</div>

    <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

  </div>

  
<div class="nav-section">
  <h3>Table of Contents</h3>

  <ul class="link-list" role="directory">
    <li><a href="#class-Tempfile-label-Synopsis">Synopsis</a>
    <li><a href="#class-Tempfile-label-Good+practices">Good practices</a>
    <li><a href="#class-Tempfile-label-Explicit+close">Explicit close</a>
    <li><a href="#class-Tempfile-label-Unlink+after+creation">Unlink after creation</a>
    <li><a href="#class-Tempfile-label-Minor+notes">Minor notes</a>
  </ul>
</div>


  <div id="class-metadata">
    
    <div id="parent-class-section" class="nav-section">
  <h3>Parent</h3>

  
  <p class="link">DelegateClass(File)
  
</div>

    
    
    <!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    
    <li ><a href="#method-c-create">::create</a>
    
    <li class="calls-super" ><a href="#method-c-new">::new</a>
    
    <li ><a href="#method-c-open">::open</a>
    
    <li ><a href="#method-i-close">#close</a>
    
    <li ><a href="#method-i-close-21">#close!</a>
    
    <li ><a href="#method-i-delete">#delete</a>
    
    <li ><a href="#method-i-length">#length</a>
    
    <li ><a href="#method-i-open">#open</a>
    
    <li ><a href="#method-i-path">#path</a>
    
    <li ><a href="#method-i-size">#size</a>
    
    <li ><a href="#method-i-unlink">#unlink</a>
    
  </ul>
</div>

  </div>
</nav>

<main role="main" aria-labelledby="class-Tempfile">
  <h1 id="class-Tempfile" class="class">
    class Tempfile
  </h1>

  <section class="description">
    
<p>A utility class for managing temporary files. When you create a <a href="Tempfile.html"><code>Tempfile</code></a> object, it will create a temporary file with a unique filename. A <a href="Tempfile.html"><code>Tempfile</code></a> objects behaves just like a <a href="File.html"><code>File</code></a> object, and you can perform all the usual file operations on it: reading data, writing data, changing its permissions, etc. So although this class does not explicitly document all instance methods supported by <a href="File.html"><code>File</code></a>, you can in fact call any <a href="File.html"><code>File</code></a> instance method on a <a href="Tempfile.html"><code>Tempfile</code></a> object.</p>

<h2 id="class-Tempfile-label-Synopsis">Synopsis<span><a href="#class-Tempfile-label-Synopsis">&para;</a> <a href="#top">&uarr;</a></span></h2>

<pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">&#39;tempfile&#39;</span>

<span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;foo&#39;</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">path</span>      <span class="ruby-comment"># =&gt; A unique filename in the OS&#39;s temp directory,</span>
               <span class="ruby-comment">#    e.g.: &quot;/tmp/foo.24722.0&quot;</span>
               <span class="ruby-comment">#    This filename contains &#39;foo&#39; in its basename.</span>
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-string">&quot;hello world&quot;</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">rewind</span>
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>      <span class="ruby-comment"># =&gt; &quot;hello world&quot;</span>
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span>
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">unlink</span>    <span class="ruby-comment"># deletes the temp file</span>
</pre>

<h2 id="class-Tempfile-label-Good+practices">Good practices<span><a href="#class-Tempfile-label-Good+practices">&para;</a> <a href="#top">&uarr;</a></span></h2>

<h3 id="class-Tempfile-label-Explicit+close">Explicit close<span><a href="#class-Tempfile-label-Explicit+close">&para;</a> <a href="#top">&uarr;</a></span></h3>

<p>When a <a href="Tempfile.html"><code>Tempfile</code></a> object is garbage collected, or when the Ruby interpreter exits, its associated temporary file is automatically deleted. This means that&#39;s it&#39;s unnecessary to explicitly delete a <a href="Tempfile.html"><code>Tempfile</code></a> after use, though it&#39;s good practice to do so: not explicitly deleting unused Tempfiles can potentially leave behind large amounts of tempfiles on the filesystem until they&#39;re garbage collected. The existence of these temp files can make it harder to determine a new <a href="Tempfile.html"><code>Tempfile</code></a> filename.</p>

<p>Therefore, one should always call <a href="Tempfile.html#method-i-unlink"><code>unlink</code></a> or close in an ensure block, like this:</p>

<pre class="ruby"><span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;foo&#39;</span>)
<span class="ruby-keyword">begin</span>
   <span class="ruby-comment"># ...do something with file...</span>
<span class="ruby-keyword">ensure</span>
   <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span>
   <span class="ruby-identifier">file</span>.<span class="ruby-identifier">unlink</span>   <span class="ruby-comment"># deletes the temp file</span>
<span class="ruby-keyword">end</span>
</pre>

<h3 id="class-Tempfile-label-Unlink+after+creation">Unlink after creation<span><a href="#class-Tempfile-label-Unlink+after+creation">&para;</a> <a href="#top">&uarr;</a></span></h3>

<p>On POSIX systems, it&#39;s possible to unlink a file right after creating it, and before closing it. This removes the filesystem entry without closing the file handle, so it ensures that only the processes that already had the file handle open can access the file&#39;s contents. It&#39;s strongly recommended that you do this if you do not want any other processes to be able to read from or write to the <a href="Tempfile.html"><code>Tempfile</code></a>, and you do not need to know the Tempfile&#39;s filename either.</p>

<p>For example, a practical use case for unlink-after-creation would be this: you need a large byte buffer that&#39;s too large to comfortably fit in RAM, e.g. when you&#39;re writing a web server and you want to buffer the client&#39;s file upload data.</p>

<p>Please refer to <a href="Tempfile.html#method-i-unlink"><code>unlink</code></a> for more information and a code example.</p>

<h2 id="class-Tempfile-label-Minor+notes">Minor notes<span><a href="#class-Tempfile-label-Minor+notes">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>Tempfile&#39;s filename picking method is both thread-safe and inter-process-safe: it guarantees that no other threads or processes will pick the same filename.</p>

<p><a href="Tempfile.html"><code>Tempfile</code></a> itself however may not be entirely thread-safe. If you access the same <a href="Tempfile.html"><code>Tempfile</code></a> object from multiple threads then you should protect it with a mutex.</p>

  </section>

  
  <section id="5Buntitled-5D" class="documentation-section">
    

    

    

    

    
     <section id="public-class-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Class Methods</h3>
       </header>

    
      <div id="method-c-create" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">create</span><span
            class="method-args">(basename=&quot;&quot;, tmpdir=nil, mode: 0, **options) { |tmpfile| ... }</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Creates a temporary file as usual <a href="File.html"><code>File</code></a> object (not <a href="Tempfile.html"><code>Tempfile</code></a>). It doesn&#39;t use finalizer and delegation.</p>

<p>If no block is given, this is similar to <a href="Tempfile.html#method-c-new"><code>Tempfile.new</code></a> except creating <a href="File.html"><code>File</code></a> instead of <a href="Tempfile.html"><code>Tempfile</code></a>. The created file is not removed automatically. You should use <a href="File.html#method-c-unlink"><code>File.unlink</code></a> to remove it.</p>

<p>If a block is given, then a <a href="File.html"><code>File</code></a> object will be constructed, and the block is invoked with the object as the argument. The <a href="File.html"><code>File</code></a> object will be automatically closed and the temporary file is removed after the block terminates. The call returns the value of the block.</p>

<p>In any case, all arguments (<code>basename</code>, <code>tmpdir</code>, <code>mode</code>, and <code>**options</code>) will be treated as <a href="Tempfile.html#method-c-new"><code>Tempfile.new</code></a>.</p>

<pre class="ruby"><span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">create</span>(<span class="ruby-string">&#39;foo&#39;</span>, <span class="ruby-string">&#39;/home/temp&#39;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
   <span class="ruby-comment"># ... do something with f ...</span>
<span class="ruby-keyword">end</span>
</pre>
          
          

          
          <div class="method-source-code" id="create-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 323</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier ruby-title">create</span>(<span class="ruby-identifier">basename</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">tmpdir</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-value">mode:</span> <span class="ruby-value">0</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">options</span>)
  <span class="ruby-identifier">tmpfile</span> = <span class="ruby-keyword">nil</span>
  <span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-constant">Tmpname</span>.<span class="ruby-identifier">create</span>(<span class="ruby-identifier">basename</span>, <span class="ruby-identifier">tmpdir</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">options</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tmpname</span>, <span class="ruby-identifier">n</span>, <span class="ruby-identifier">opts</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">mode</span> <span class="ruby-operator">|=</span> <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">RDWR</span><span class="ruby-operator">|</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">CREAT</span><span class="ruby-operator">|</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">EXCL</span>
    <span class="ruby-identifier">opts</span>[<span class="ruby-value">:perm</span>] = <span class="ruby-value">0600</span>
    <span class="ruby-identifier">tmpfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">tmpname</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">opts</span>)
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
    <span class="ruby-keyword">begin</span>
      <span class="ruby-keyword">yield</span> <span class="ruby-identifier">tmpfile</span>
    <span class="ruby-keyword">ensure</span>
      <span class="ruby-keyword">unless</span> <span class="ruby-identifier">tmpfile</span>.<span class="ruby-identifier">closed?</span>
        <span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">identical?</span>(<span class="ruby-identifier">tmpfile</span>, <span class="ruby-identifier">tmpfile</span>.<span class="ruby-identifier">path</span>)
          <span class="ruby-identifier">unlinked</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">unlink</span> <span class="ruby-identifier">tmpfile</span>.<span class="ruby-identifier">path</span> <span class="ruby-keyword">rescue</span> <span class="ruby-keyword">nil</span>
        <span class="ruby-keyword">end</span>
        <span class="ruby-identifier">tmpfile</span>.<span class="ruby-identifier">close</span>
      <span class="ruby-keyword">end</span>
      <span class="ruby-keyword">unless</span> <span class="ruby-identifier">unlinked</span>
        <span class="ruby-keyword">begin</span>
          <span class="ruby-constant">File</span>.<span class="ruby-identifier">unlink</span> <span class="ruby-identifier">tmpfile</span>.<span class="ruby-identifier">path</span>
        <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ENOENT</span>
        <span class="ruby-keyword">end</span>
      <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">tmpfile</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-c-new" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">new</span><span
            class="method-args">(basename=&quot;&quot;, tmpdir=nil, mode: 0, **options)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Creates a temporary file with permissions 0600 (= only readable and writable by the owner) and opens it with mode “w+”.</p>

<p>The <code>basename</code> parameter is used to determine the name of the temporary file. You can either pass a <a href="String.html"><code>String</code></a> or an <a href="Array.html"><code>Array</code></a> with 2 <a href="String.html"><code>String</code></a> elements. In the former form, the temporary file&#39;s base name will begin with the given string. In the latter form, the temporary file&#39;s base name will begin with the array&#39;s first element, and end with the second element. For example:</p>

<pre class="ruby"><span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;hello&#39;</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">path</span>  <span class="ruby-comment"># =&gt; something like: &quot;/tmp/hello2843-8392-92849382--0&quot;</span>

<span class="ruby-comment"># Use the Array form to enforce an extension in the filename:</span>
<span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>([<span class="ruby-string">&#39;hello&#39;</span>, <span class="ruby-string">&#39;.jpg&#39;</span>])
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">path</span>  <span class="ruby-comment"># =&gt; something like: &quot;/tmp/hello2843-8392-92849382--0.jpg&quot;</span>
</pre>

<p>The temporary file will be placed in the directory as specified by the <code>tmpdir</code> parameter. By default, this is <code>Dir.tmpdir</code>.</p>

<pre class="ruby"><span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;hello&#39;</span>, <span class="ruby-string">&#39;/home/aisaka&#39;</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">path</span>  <span class="ruby-comment"># =&gt; something like: &quot;/home/aisaka/hello2843-8392-92849382--0&quot;</span>
</pre>

<p>You can also pass an options hash. Under the hood, <a href="Tempfile.html"><code>Tempfile</code></a> creates the temporary file using <code>File.open</code>. These options will be passed to <code>File.open</code>. This is mostly useful for specifying encoding options, e.g.:</p>

<pre class="ruby"><span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;hello&#39;</span>, <span class="ruby-string">&#39;/home/aisaka&#39;</span>, <span class="ruby-value">encoding:</span> <span class="ruby-string">&#39;ascii-8bit&#39;</span>)

<span class="ruby-comment"># You can also omit the &#39;tmpdir&#39; parameter:</span>
<span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;hello&#39;</span>, <span class="ruby-value">encoding:</span> <span class="ruby-string">&#39;ascii-8bit&#39;</span>)
</pre>

<p>Note: <code>mode</code> keyword argument, as accepted by <a href="Tempfile.html"><code>Tempfile</code></a>, can only be numeric, combination of the modes defined in <a href="File/File/Constants.html"><code>File::Constants</code></a>.</p>

<h3 id="method-c-new-label-Exceptions">Exceptions<span><a href="#method-c-new-label-Exceptions">&para;</a> <a href="#top">&uarr;</a></span></h3>

<p>If <a href="Tempfile.html#method-c-new"><code>Tempfile.new</code></a> cannot find a unique filename within a limited number of tries, then it will raise an exception.</p>
          
          
            <div class="method-calls-super">
              Calls superclass method
              
            </div>
          

          
          <div class="method-source-code" id="new-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 122</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">basename</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">tmpdir</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-value">mode:</span> <span class="ruby-value">0</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">options</span>)
  <span class="ruby-identifier">warn</span> <span class="ruby-string">&quot;Tempfile.new doesn&#39;t call the given block.&quot;</span>, <span class="ruby-value">uplevel:</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>

  <span class="ruby-ivar">@unlinked</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-ivar">@mode</span> = <span class="ruby-identifier">mode</span><span class="ruby-operator">|</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">RDWR</span><span class="ruby-operator">|</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">CREAT</span><span class="ruby-operator">|</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">EXCL</span>
  <span class="ruby-operator">::</span><span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-constant">Tmpname</span>.<span class="ruby-identifier">create</span>(<span class="ruby-identifier">basename</span>, <span class="ruby-identifier">tmpdir</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">options</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tmpname</span>, <span class="ruby-identifier">n</span>, <span class="ruby-identifier">opts</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">opts</span>[<span class="ruby-value">:perm</span>] = <span class="ruby-value">0600</span>
    <span class="ruby-ivar">@tmpfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">tmpname</span>, <span class="ruby-ivar">@mode</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">opts</span>)
    <span class="ruby-ivar">@opts</span> = <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">freeze</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-constant">ObjectSpace</span>.<span class="ruby-identifier">define_finalizer</span>(<span class="ruby-keyword">self</span>, <span class="ruby-constant">Remover</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tmpfile</span>))

  <span class="ruby-keyword">super</span>(<span class="ruby-ivar">@tmpfile</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-c-open" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">open</span><span
            class="method-args">(*args, **kw) { |tempfile| ... }</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Creates a new <a href="Tempfile.html"><code>Tempfile</code></a>.</p>

<p>If no block is given, this is a synonym for <a href="Tempfile.html#method-c-new"><code>Tempfile.new</code></a>.</p>

<p>If a block is given, then a <a href="Tempfile.html"><code>Tempfile</code></a> object will be constructed, and the block is run with said object as argument. The <a href="Tempfile.html"><code>Tempfile</code></a> object will be automatically closed after the block terminates. The call returns the value of the block.</p>

<p>In any case, all arguments (<code>*args</code>) will be passed to <a href="Tempfile.html#method-c-new"><code>Tempfile.new</code></a>.</p>

<pre class="ruby"><span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">&#39;foo&#39;</span>, <span class="ruby-string">&#39;/home/temp&#39;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
   <span class="ruby-comment"># ... do something with f ...</span>
<span class="ruby-keyword">end</span>

<span class="ruby-comment"># Equivalent:</span>
<span class="ruby-identifier">f</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">&#39;foo&#39;</span>, <span class="ruby-string">&#39;/home/temp&#39;</span>)
<span class="ruby-keyword">begin</span>
   <span class="ruby-comment"># ... do something with f ...</span>
<span class="ruby-keyword">ensure</span>
   <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
<span class="ruby-keyword">end</span>
</pre>
          
          

          
          <div class="method-source-code" id="open-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 286</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kw</span>)
  <span class="ruby-identifier">tempfile</span> = <span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kw</span>)

  <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
    <span class="ruby-keyword">begin</span>
      <span class="ruby-keyword">yield</span>(<span class="ruby-identifier">tempfile</span>)
    <span class="ruby-keyword">ensure</span>
      <span class="ruby-identifier">tempfile</span>.<span class="ruby-identifier">close</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">tempfile</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
     <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Instance Methods</h3>
       </header>

    
      <div id="method-i-close" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">close</span><span
            class="method-args">(unlink_now=false)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Closes the file. If <code>unlink_now</code> is true, then the file will be unlinked (deleted) after closing. Of course, you can choose to later call <a href="Tempfile.html#method-i-unlink"><code>unlink</code></a> if you do not unlink it now.</p>

<p>If you don&#39;t explicitly unlink the temporary file, the removal will be delayed until the object is finalized.</p>
          
          

          
          <div class="method-source-code" id="close-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 156</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">close</span>(<span class="ruby-identifier">unlink_now</span>=<span class="ruby-keyword">false</span>)
  <span class="ruby-identifier">_close</span>
  <span class="ruby-identifier">unlink</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">unlink_now</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-close-21" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">close!</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Closes and unlinks (deletes) the file. Has the same effect as called <code>close(true)</code>.</p>
          
          

          
          <div class="method-source-code" id="close-21-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 163</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">close!</span>
  <span class="ruby-identifier">close</span>(<span class="ruby-keyword">true</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-delete" class="method-detail method-alias">
        
        <div class="method-heading">
          <span class="method-name">delete</span><span
            class="method-args">()</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
        </div>

        

        
        <div class="aliases">
          Alias for: <a href="Tempfile.html#method-i-unlink">unlink</a>
        </div>
        
      </div>

    
      <div id="method-i-length" class="method-detail method-alias">
        
        <div class="method-heading">
          <span class="method-name">length</span><span
            class="method-args">()</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
        </div>

        

        
        <div class="aliases">
          Alias for: <a href="Tempfile.html#method-i-size">size</a>
        </div>
        
      </div>

    
      <div id="method-i-open" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">open</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Opens or reopens the file with mode “r+”.</p>
          
          

          
          <div class="method-source-code" id="open-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 138</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open</span>
  <span class="ruby-identifier">_close</span>
  <span class="ruby-identifier">mode</span> = <span class="ruby-ivar">@mode</span> <span class="ruby-operator">&amp;</span> <span class="ruby-operator">~</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">CREAT</span><span class="ruby-operator">|</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">EXCL</span>)
  <span class="ruby-ivar">@tmpfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">path</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-operator">**</span><span class="ruby-ivar">@opts</span>)
  <span class="ruby-identifier">__setobj__</span>(<span class="ruby-ivar">@tmpfile</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-path" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">path</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Returns the full path name of the temporary file. This will be nil if <a href="Tempfile.html#method-i-unlink"><code>unlink</code></a> has been called.</p>
          
          

          
          <div class="method-source-code" id="path-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 216</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">path</span>
  <span class="ruby-ivar">@unlinked</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">nil</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-size" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">size</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Returns the size of the temporary file.  As a side effect, the <a href="IO.html"><code>IO</code></a> buffer is flushed before determining the size.</p>
          
          

          
          <div class="method-source-code" id="size-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 222</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">size</span>
  <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">closed?</span>
    <span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">size</span> <span class="ruby-comment"># File#size calls rb_io_flush_raw()</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-constant">File</span>.<span class="ruby-identifier">size</span>(<span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">path</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        
        <div class="aliases">
          Also aliased as: <a href="Tempfile.html#method-i-length">length</a>
        </div>
        

        
      </div>

    
      <div id="method-i-unlink" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">unlink</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Unlinks (deletes) the file from the filesystem. One should always unlink the file after using it, as is explained in the “Explicit close” good practice section in the <a href="Tempfile.html"><code>Tempfile</code></a> overview:</p>

<pre class="ruby"><span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;foo&#39;</span>)
<span class="ruby-keyword">begin</span>
   <span class="ruby-comment"># ...do something with file...</span>
<span class="ruby-keyword">ensure</span>
   <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span>
   <span class="ruby-identifier">file</span>.<span class="ruby-identifier">unlink</span>   <span class="ruby-comment"># deletes the temp file</span>
<span class="ruby-keyword">end</span>
</pre>

<h3 id="method-i-unlink-label-Unlink-before-close">Unlink-before-close<span><a href="#method-i-unlink-label-Unlink-before-close">&para;</a> <a href="#top">&uarr;</a></span></h3>

<p>On POSIX systems it&#39;s possible to unlink a file before closing it. This practice is explained in detail in the <a href="Tempfile.html"><code>Tempfile</code></a> overview (section “Unlink after creation”); please refer there for more information.</p>

<p>However, unlink-before-close may not be supported on non-POSIX operating systems. Microsoft Windows is the most notable case: unlinking a non-closed file will result in an error, which this method will silently ignore. If you want to practice unlink-before-close whenever possible, then you should write code like this:</p>

<pre class="ruby"><span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;foo&#39;</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">unlink</span>   <span class="ruby-comment"># On Windows this silently fails.</span>
<span class="ruby-keyword">begin</span>
   <span class="ruby-comment"># ... do something with file ...</span>
<span class="ruby-keyword">ensure</span>
   <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close!</span>   <span class="ruby-comment"># Closes the file handle. If the file wasn&#39;t unlinked</span>
                 <span class="ruby-comment"># because #unlink failed, then this method will attempt</span>
                 <span class="ruby-comment"># to do so again.</span>
<span class="ruby-keyword">end</span>
</pre>
          
          

          
          <div class="method-source-code" id="unlink-source">
            <pre><span class="ruby-comment"># File lib/tempfile.rb, line 200</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">unlink</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@unlinked</span>
  <span class="ruby-keyword">begin</span>
    <span class="ruby-constant">File</span>.<span class="ruby-identifier">unlink</span>(<span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">path</span>)
  <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ENOENT</span>
  <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">EACCES</span>
    <span class="ruby-comment"># may not be able to unlink on Windows; just ignore</span>
    <span class="ruby-keyword">return</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-constant">ObjectSpace</span>.<span class="ruby-identifier">undefine_finalizer</span>(<span class="ruby-keyword">self</span>)
  <span class="ruby-ivar">@unlinked</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        
        <div class="aliases">
          Also aliased as: <a href="Tempfile.html#method-i-delete">delete</a>
        </div>
        

        
      </div>

    
    </section>
  
  </section>

</main>


<footer id="validator-badges" role="contentinfo">
  <p><a href="https://validator.w3.org/check/referer">Validate</a>
  <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>