gopkg.in/essentialkaos/ek.v3@v3.5.1/fsutil/file.go (about)

     1  package fsutil
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                     Copyright (c) 2009-2016 Essential Kaos                         //
     6  //      Essential Kaos Open Source License <http://essentialkaos.com/ekol?en>         //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"bufio"
    12  	"errors"
    13  	"io"
    14  	"os"
    15  	"path"
    16  )
    17  
    18  // ////////////////////////////////////////////////////////////////////////////////// //
    19  
    20  // CopyFile simple file copying with bufio
    21  func CopyFile(from, to string, perms ...os.FileMode) error {
    22  	dir := path.Dir(to)
    23  
    24  	switch {
    25  	case IsExist(from) == false:
    26  		return errors.New("File " + from + " is not exists")
    27  	case IsRegular(from) == false:
    28  		return errors.New("File " + from + " is not a regular file")
    29  	case IsReadable(from) == false:
    30  		return errors.New("File " + from + " is not readable")
    31  	case IsExist(dir) == false:
    32  		return errors.New("Directory " + from + " is not exists")
    33  	case IsWritable(dir) == false:
    34  		return errors.New("Directory " + from + " is not writable")
    35  	}
    36  
    37  	if IsExist(to) {
    38  		os.Remove(to)
    39  	}
    40  
    41  	var perm os.FileMode = 0644
    42  
    43  	if len(perms) != 0 {
    44  		perm = perms[0]
    45  	}
    46  
    47  	ffd, err := os.OpenFile(from, os.O_RDONLY, 0644)
    48  
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	defer ffd.Close()
    54  
    55  	tfd, err := os.OpenFile(to, os.O_CREATE|os.O_WRONLY, perm)
    56  
    57  	if err != nil {
    58  		return err
    59  	}
    60  
    61  	defer tfd.Close()
    62  
    63  	reader := bufio.NewReader(ffd)
    64  
    65  	_, err = io.Copy(tfd, reader)
    66  
    67  	return err
    68  }
    69  
    70  // MoveFile move file
    71  func MoveFile(from, to string, perms ...os.FileMode) error {
    72  	err := os.Rename(from, to)
    73  
    74  	if err != nil {
    75  		return err
    76  	}
    77  
    78  	if len(perms) == 0 {
    79  		return nil
    80  	}
    81  
    82  	return os.Chmod(to, perms[0])
    83  }