committed by
Mark McGranaghan
parent
f9050decb5
commit
8219122e44
@@ -0,0 +1,65 @@
|
||||
// Throughout program execution, we often want to create
|
||||
// data that isn't needed after the program exits.
|
||||
// *Temporary files and directories* are useful for this
|
||||
// purpose since they don't pollute the file system over
|
||||
// time.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func check(e error) {
|
||||
if e != nil {
|
||||
panic(e)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
// The easiest way to create a temporary file is by
|
||||
// calling `ioutil.TempFile`. It creates a file *and*
|
||||
// opens it for reading and writing. We provide `""`
|
||||
// as the first argument, so `ioutil.TempFile` will
|
||||
// create the file in the default location for our OS.
|
||||
f, err := ioutil.TempFile("", "sample")
|
||||
check(err)
|
||||
|
||||
// Display the name of the temporary file. On
|
||||
// Unix-based OSes the directory will likely be `/tmp`.
|
||||
// The file name starts with the prefix given as the
|
||||
// second argument to `ioutil.TempFile` and the rest
|
||||
// is chosen automatically to ensure that concurrent
|
||||
// calls will always create different file names.
|
||||
fmt.Println("Temp file name:", f.Name())
|
||||
|
||||
// Clean up the file after we're done. The OS is
|
||||
// likely to clean up temporary files by itself after
|
||||
// some time, but it's good practice to do this
|
||||
// explicitly.
|
||||
defer os.Remove(f.Name())
|
||||
|
||||
// We can write some data to the file.
|
||||
_, err = f.Write([]byte{1, 2, 3, 4})
|
||||
check(err)
|
||||
|
||||
// If we intend to write many temporary files, we may
|
||||
// prefer to create a temporary *directory*.
|
||||
// `ioutil.TempDir`'s arguments are the same as
|
||||
// `TempFile`'s, but it returns a directory *name*
|
||||
// rather than an open file.
|
||||
dname, err := ioutil.TempDir("", "sampledir")
|
||||
fmt.Println("Temp dir name:", dname)
|
||||
|
||||
defer os.RemoveAll(dname)
|
||||
|
||||
// Now we can synthesize temporary file names by
|
||||
// prefixing them with our temporary directory.
|
||||
fname := filepath.Join(dname, "file1")
|
||||
err = ioutil.WriteFile(fname, []byte{1, 2}, 0666)
|
||||
check(err)
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
5f7d0c43988d7dce235adb06ec02f4d2026b7f83
|
||||
pxE20wGTFjv
|
||||
@@ -0,0 +1,4 @@
|
||||
# The exact names printed out will likely be different.
|
||||
$ go run temporary-files-and-directories.go
|
||||
Temp file name: /tmp/sample610887201
|
||||
Temp dir name: /tmp/sampledir898854668
|
||||
Reference in New Issue
Block a user