file util: copy file/dir
This commit is contained in:
parent
3c30d09cb6
commit
9119a1da45
66
util/file.go
66
util/file.go
|
@ -15,7 +15,9 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/b3log/wide/log"
|
"github.com/b3log/wide/log"
|
||||||
|
@ -80,3 +82,67 @@ func (*myfile) IsDir(path string) bool {
|
||||||
|
|
||||||
return fio.IsDir()
|
return fio.IsDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyFile copies the source file to the dest file.
|
||||||
|
func (*myfile) CopyFile(source string, dest string) (err error) {
|
||||||
|
sourcefile, err := os.Open(source)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer sourcefile.Close()
|
||||||
|
|
||||||
|
destfile, err := os.Create(dest)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer destfile.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(destfile, sourcefile)
|
||||||
|
if err == nil {
|
||||||
|
sourceinfo, err := os.Stat(source)
|
||||||
|
if err != nil {
|
||||||
|
err = os.Chmod(dest, sourceinfo.Mode())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CopyDir copies the source directory to the dest directory.
|
||||||
|
func (*myfile) CopyDir(source string, dest string) (err error) {
|
||||||
|
sourceinfo, err := os.Stat(source)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// create dest dir
|
||||||
|
err = os.MkdirAll(dest, sourceinfo.Mode())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
directory, _ := os.Open(source)
|
||||||
|
objects, err := directory.Readdir(-1)
|
||||||
|
|
||||||
|
for _, obj := range objects {
|
||||||
|
srcFilePath := filepath.Join(source, obj.Name())
|
||||||
|
destFilePath := filepath.Join(dest, obj.Name())
|
||||||
|
|
||||||
|
if obj.IsDir() {
|
||||||
|
// create sub-directories - recursively
|
||||||
|
err = File.CopyDir(srcFilePath, destFilePath)
|
||||||
|
if err != nil {
|
||||||
|
fileLogger.Error(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = File.CopyFile(srcFilePath, destFilePath)
|
||||||
|
if err != nil {
|
||||||
|
fileLogger.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -56,3 +58,35 @@ func TestIsDir(t *testing.T) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCopyDir(t *testing.T) {
|
||||||
|
home, _ := OS.Home()
|
||||||
|
|
||||||
|
testDir := filepath.Join(home, "wide-test")
|
||||||
|
os.Mkdir(testDir, 0644)
|
||||||
|
|
||||||
|
dest := filepath.Join(testDir, "util")
|
||||||
|
|
||||||
|
err := File.CopyDir(".", dest)
|
||||||
|
if nil != err {
|
||||||
|
t.Error("Copy dir error: ", err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCopyFile(t *testing.T) {
|
||||||
|
home, _ := OS.Home()
|
||||||
|
|
||||||
|
testDir := filepath.Join(home, "wide-test")
|
||||||
|
os.Mkdir(testDir, 0644)
|
||||||
|
|
||||||
|
dest := filepath.Join(testDir, "file.go")
|
||||||
|
|
||||||
|
err := File.CopyFile("./file.go", dest)
|
||||||
|
if nil != err {
|
||||||
|
t.Error("Copy file error: ", err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -16,10 +16,13 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
var packageName = "test_zip"
|
var home, _ = OS.Home()
|
||||||
|
var testDir = filepath.Join(home, "wide-test")
|
||||||
|
var packageName = filepath.Join(testDir, "test_zip")
|
||||||
|
|
||||||
func TestCreate(t *testing.T) {
|
func TestCreate(t *testing.T) {
|
||||||
zipFile, err := Zip.Create(packageName + ".zip")
|
zipFile, err := Zip.Create(packageName + ".zip")
|
||||||
|
@ -54,11 +57,12 @@ func TestUnzip(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
|
os.Mkdir(testDir, 0644)
|
||||||
|
|
||||||
retCode := m.Run()
|
retCode := m.Run()
|
||||||
|
|
||||||
// clean test data
|
// clean test data
|
||||||
os.RemoveAll(packageName + ".zip")
|
os.RemoveAll(testDir)
|
||||||
os.RemoveAll(packageName)
|
|
||||||
|
|
||||||
os.Exit(retCode)
|
os.Exit(retCode)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue