From 71262e3081dc2c3a4f10a6045490872e197378d7 Mon Sep 17 00:00:00 2001
From: Rahul Sutar <rahuls@mkcl.org>
Date: Mon, 19 Jun 2017 17:25:14 +0530
Subject: [PATCH] File Helper

Committing file helper
---
 coreos/fileHelper.go | 281 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 281 insertions(+)
 create mode 100644 coreos/fileHelper.go

diff --git a/coreos/fileHelper.go b/coreos/fileHelper.go
new file mode 100644
index 0000000..b443d6a
--- /dev/null
+++ b/coreos/fileHelper.go
@@ -0,0 +1,281 @@
+package coreos
+
+import (
+	"archive/zip"
+	"io"
+	"io/ioutil"
+	"os"
+	"path/filepath"
+	"strings"
+)
+
+var searchResult []string
+var searchFileName string
+
+// ReadFile reads contents from provided file path
+func ReadFile(filePath string) ([]byte, error) {
+	return ioutil.ReadFile(filePath)
+
+}
+
+//CreateFile creates a new file
+func CreateFile(filePath string) (*os.File, error) {
+	return os.Create(filePath)
+}
+
+// WriteFile writes provided  bytes to file
+func WriteFile(filePath string, data []byte) error {
+	return ioutil.WriteFile(filePath, data, 0644)
+}
+
+//AppendFile appends prvided data/text to file
+func AppendFile(filename string, text string) (int, error) {
+
+	f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
+	if err != nil {
+		return 0, err
+	}
+
+	defer f.Close()
+
+	return f.WriteString(text)
+}
+
+//DeleteFile deletes provided file path
+func DeleteFile(filePath string) error {
+	return os.Remove(filePath)
+}
+
+// RenameFile renames/moves file from old path to new path
+func RenameFile(oldFilePath, newFilePath string) error {
+	return os.Rename(oldFilePath, newFilePath)
+}
+
+// CreateDirectory creates directory using provided path
+func CreateDirectory(directoryPath string) error {
+	return os.Mkdir(directoryPath, 0777)
+}
+
+// DeleteDirectory creates directory using provided path
+func DeleteDirectory(directoryPath string) error {
+	return os.RemoveAll(directoryPath)
+}
+
+//ListDirectory returns list of all available components of directory
+func ListDirectory(directoryPath string) ([]os.FileInfo, error) {
+	return ioutil.ReadDir(directoryPath)
+}
+
+//Zip Zip
+func Zip(source, target string) error {
+	zipfile, err := os.Create(target)
+	if err != nil {
+		return err
+	}
+	defer zipfile.Close()
+
+	archive := zip.NewWriter(zipfile)
+	defer archive.Close()
+
+	info, err := os.Stat(source)
+	if err != nil {
+		return nil
+	}
+
+	var baseDir string
+	if info.IsDir() {
+		baseDir = filepath.Base(source)
+	}
+
+	filepath.Walk(source, func(path string, info os.FileInfo, err error) error {
+		if err != nil {
+			return err
+		}
+
+		header, err := zip.FileInfoHeader(info)
+		if err != nil {
+			return err
+		}
+
+		if baseDir != "" {
+			header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
+		}
+
+		if info.IsDir() {
+			header.Name += "/"
+		} else {
+			header.Method = zip.Deflate
+		}
+
+		writer, err := archive.CreateHeader(header)
+		if err != nil {
+			return err
+		}
+
+		if info.IsDir() {
+			return nil
+		}
+
+		file, err := os.Open(path)
+		if err != nil {
+			return err
+		}
+		defer file.Close()
+		_, err = io.Copy(writer, file)
+		return err
+	})
+
+	return err
+}
+
+//Unzip Unzip
+func Unzip(archive, target string) error {
+	reader, err := zip.OpenReader(archive)
+	if err != nil {
+		return err
+	}
+
+	if err := os.MkdirAll(target, 0755); err != nil {
+		return err
+	}
+
+	for _, file := range reader.File {
+		path := filepath.Join(target, file.Name)
+		if file.FileInfo().IsDir() {
+			os.MkdirAll(path, file.Mode())
+			continue
+		}
+
+		fileReader, err := file.Open()
+		if err != nil {
+			return err
+		}
+		defer fileReader.Close()
+
+		targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
+		if err != nil {
+			return err
+		}
+		defer targetFile.Close()
+
+		if _, err := io.Copy(targetFile, fileReader); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+//MoveDirectory MoveDirectory
+func MoveDirectory(source, destination string) error {
+	return os.Rename(source, destination)
+}
+
+//MoveFile MoveFile
+func MoveFile(source, destination string) error {
+	return os.Rename(source, destination)
+}
+
+//CopyFile CopyFile
+func CopyFile(source, destination string) error {
+	// return os.Rename(source, destination)
+
+	data, err := ioutil.ReadFile(source)
+	if err != nil {
+		return err
+	}
+	err = ioutil.WriteFile(destination, data, 0644)
+
+	return err
+}
+
+//ReplaceFile ReplaceFile
+func ReplaceFile(data []byte, destination string) error {
+
+	err := ioutil.WriteFile(destination, data, 0644)
+
+	return err
+}
+
+//TruncateFile TruncateFile
+func TruncateFile(path string, size int64) error {
+	return os.Truncate(path, size)
+}
+
+//SeekFile SeekFile
+// func SeekFile(path string, offset int64) error {
+// 	file, err := os.OpenFile(path, os.O_RDWR, 0600)
+// 	if err != nil {
+// 		return err
+// 	}
+
+// 	defer file.Close()
+
+// 	_, err = file.Seek(offset, 0)
+
+// 	return err
+// }
+
+//FileInfo FileInfo
+func FileInfo(path string) (os.FileInfo, error) {
+	return os.Stat(path)
+}
+
+//FileSearch FileSearch
+func FileSearch(fileName, path string) ([]string, error) {
+	searchFileName = fileName
+	searchDirectory, err := os.Open(path)
+	if err != nil {
+		return searchResult, err
+	}
+	defer searchDirectory.Close()
+
+	testFileInfo, _ := searchDirectory.Stat()
+	if !testFileInfo.IsDir() {
+		return searchResult, err
+	}
+
+	err = filepath.Walk(path, findFile)
+	if err != nil {
+		return searchResult, err
+	}
+
+	return searchResult, nil
+
+}
+
+func findFile(path string, fileInfo os.FileInfo, err error) error {
+
+	if err != nil {
+
+		return err
+	}
+
+	// get absolute path of the folder that we are searching
+	absolute, err := filepath.Abs(path)
+	if err != nil {
+
+		return err
+	}
+
+	if fileInfo.IsDir() {
+		testDir, err := os.Open(absolute)
+		if err != nil {
+			return err
+		}
+		testDir.Close()
+		return nil
+	}
+
+	matched, err := filepath.Match(searchFileName, fileInfo.Name())
+	if err != nil {
+		return err
+	}
+
+	if matched {
+		add := absolute
+		searchResult = append(searchResult, add)
+	}
+
+	return nil
+}
-- 
GitLab