1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package ioutil implements some I/O utility functions. 6 // 7 // As of Go 1.16, the same functionality is now provided 8 // by package io or package os, and those implementations 9 // should be preferred in new code. 10 // See the specific function documentation for details. 11 package ioutil 12 13 import ( 14 "io" 15 "io/fs" 16 "os" 17 "sort" 18 ) 19 20 // ReadAll reads from r until an error or EOF and returns the data it read. 21 // A successful call returns err == nil, not err == EOF. Because ReadAll is 22 // defined to read from src until EOF, it does not treat an EOF from Read 23 // as an error to be reported. 24 // 25 // As of Go 1.16, this function simply calls io.ReadAll. 26 func ReadAll(r io.Reader) ([]byte, error) { 27 return io.ReadAll(r) 28 } 29 30 // ReadFile reads the file named by filename and returns the contents. 31 // A successful call returns err == nil, not err == EOF. Because ReadFile 32 // reads the whole file, it does not treat an EOF from Read as an error 33 // to be reported. 34 // 35 // As of Go 1.16, this function simply calls os.ReadFile. 36 func ReadFile(filename string) ([]byte, error) { 37 return os.ReadFile(filename) 38 } 39 40 // WriteFile writes data to a file named by filename. 41 // If the file does not exist, WriteFile creates it with permissions perm 42 // (before umask); otherwise WriteFile truncates it before writing, without changing permissions. 43 // 44 // As of Go 1.16, this function simply calls os.WriteFile. 45 func WriteFile(filename string, data []byte, perm fs.FileMode) error { 46 return os.WriteFile(filename, data, perm) 47 } 48 49 // ReadDir reads the directory named by dirname and returns 50 // a list of fs.FileInfo for the directory's contents, 51 // sorted by filename. If an error occurs reading the directory, 52 // ReadDir returns no directory entries along with the error. 53 // 54 // As of Go 1.16, os.ReadDir is a more efficient and correct choice: 55 // it returns a list of fs.DirEntry instead of fs.FileInfo, 56 // and it returns partial results in the case of an error 57 // midway through reading a directory. 58 func ReadDir(dirname string) ([]fs.FileInfo, error) { 59 f, err := os.Open(dirname) 60 if err != nil { 61 return nil, err 62 } 63 list, err := f.Readdir(-1) 64 f.Close() 65 if err != nil { 66 return nil, err 67 } 68 sort.Slice(list, func(i, j int) bool { return list[i].Name() < list[j].Name() }) 69 return list, nil 70 } 71 72 // NopCloser returns a ReadCloser with a no-op Close method wrapping 73 // the provided Reader r. 74 // 75 // As of Go 1.16, this function simply calls io.NopCloser. 76 func NopCloser(r io.Reader) io.ReadCloser { 77 return io.NopCloser(r) 78 } 79 80 // Discard is an io.Writer on which all Write calls succeed 81 // without doing anything. 82 // 83 // As of Go 1.16, this value is simply io.Discard. 84 var Discard io.Writer = io.Discard 85