319 lines
6.5 KiB
Go
319 lines
6.5 KiB
Go
|
|
package gofile
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"os"
|
||
|
|
"io/fs"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
type FileStats struct {
|
||
|
|
Name string
|
||
|
|
Size int64
|
||
|
|
Mode fs.FileMode
|
||
|
|
ModTime time.Time
|
||
|
|
IsDir bool
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Delete a file
|
||
|
|
*/
|
||
|
|
func DeleteFile(file string) (int64,error) {
|
||
|
|
if file == "" {
|
||
|
|
panic("DeleteFile(): file parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
err := os.Remove(file)
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("DeleteFile(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Delete a directory AND subdirectories
|
||
|
|
*/
|
||
|
|
func DeleteDir(dir string) (int64,error) {
|
||
|
|
if dir == "" {
|
||
|
|
panic("DeleteDir(): file parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
err := os.RemoveAll(dir)
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("DeleteFile(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Move a file
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Create an empty file
|
||
|
|
*/
|
||
|
|
func CreateFile(file string, mode os.FileMode) (int64,error) {
|
||
|
|
if file == "" {
|
||
|
|
panic("Write(): file parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
f, err := os.Create(file)
|
||
|
|
defer f.Close()
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("CreateFile(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
err = os.Chmod(file, mode)
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("CreateFile(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Create a directory but do not and silently ignore if the directory already exists
|
||
|
|
*/
|
||
|
|
func CreateDir(dir string, mode os.FileMode) (int64,error) {
|
||
|
|
if dir == "" {
|
||
|
|
panic("CreateDir(): dir parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
//blacklist = []string{
|
||
|
|
// "/", "/bin", "/boot", "/dev", "/etc", "/home", "/lib", "/lib64", "/media", "/mnt", "/opt", "/root", "/run", "/sbin", "/srv", "/sys", "/tmp", "/usr", "/var"
|
||
|
|
//}
|
||
|
|
|
||
|
|
_, err := os.Stat(dir)
|
||
|
|
if err != nil {
|
||
|
|
if os.IsNotExist(err) {
|
||
|
|
fmt.Printf("CreateDir(): directory %s does not exist\n", dir)
|
||
|
|
//return 1, fmt.Errorf("CreateDir(): %v", err)
|
||
|
|
} else {
|
||
|
|
return 1, fmt.Errorf("CreateDir(): %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
err = os.Mkdir(dir, mode)
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("CreateDir(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0, nil
|
||
|
|
|
||
|
|
/*if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||
|
|
fmt.Println("Directory ", dir, "already exists")
|
||
|
|
err := os.Mkdir(dir, mode)
|
||
|
|
check(err)
|
||
|
|
} else {
|
||
|
|
fmt.Println(dir, "does exist!")
|
||
|
|
}*/
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Create a directory but do not and silently ignore if the directory already exists
|
||
|
|
*/
|
||
|
|
func CreateDirAll(dir string, mode os.FileMode) {
|
||
|
|
if dir == "" {
|
||
|
|
panic("CreateDir(): dir parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||
|
|
err := os.MkdirAll(dir, mode)
|
||
|
|
check(err)
|
||
|
|
} else {
|
||
|
|
fmt.Println(dir, "already exist!")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Read data from a file and return it as []byte
|
||
|
|
*/
|
||
|
|
func Read(file string) []byte {
|
||
|
|
if file == "" {
|
||
|
|
panic("Write(): file parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
text, err := os.ReadFile(file)
|
||
|
|
check(err)
|
||
|
|
|
||
|
|
//fmt.Println(string(text))
|
||
|
|
|
||
|
|
return text
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Create a new file or overwrite an existing file
|
||
|
|
*/
|
||
|
|
func Write(file string, text string, mode os.FileMode) (int64,error) {
|
||
|
|
if file == "" {
|
||
|
|
panic("Write(): file parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(text) <= 0 {
|
||
|
|
panic("Write(): text parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
text_with_newline := fmt.Sprintf("%s\n", text)
|
||
|
|
text_byte := []byte(text_with_newline)
|
||
|
|
|
||
|
|
err := os.WriteFile(file, text_byte, mode)
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("Write(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Append data to a file and return err
|
||
|
|
*/
|
||
|
|
func Append(file string, text string, mode os.FileMode) (int64,error) {
|
||
|
|
if file == "" {
|
||
|
|
panic("Write(): file parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(text) <= 0 {
|
||
|
|
panic("Write(): text parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
//f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, mode)
|
||
|
|
f, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, mode)
|
||
|
|
defer f.Close()
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("Append(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
_, err = f.WriteString(text + "\n")
|
||
|
|
if err != nil {
|
||
|
|
return 1, fmt.Errorf("Append(): %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Get information about a file and return as a struct
|
||
|
|
*/
|
||
|
|
func Stats(dir string) FileStats {
|
||
|
|
if dir == "" {
|
||
|
|
panic("Stats(): dir parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
fi, err := os.Stat(dir)
|
||
|
|
check(err)
|
||
|
|
|
||
|
|
return FileStats {
|
||
|
|
Name: fi.Name(),
|
||
|
|
Size: fi.Size(),
|
||
|
|
Mode: fi.Mode(),
|
||
|
|
ModTime: fi.ModTime(),
|
||
|
|
IsDir: fi.IsDir(),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Read files in a directory and return a list
|
||
|
|
*/
|
||
|
|
func ReadDir(dir string) []string {
|
||
|
|
parsed_files := []string{}
|
||
|
|
|
||
|
|
if dir == "" {
|
||
|
|
panic("ReadDir(): dir parameter empty. Aborting.")
|
||
|
|
}
|
||
|
|
|
||
|
|
f, err := os.Open(dir)
|
||
|
|
check(err)
|
||
|
|
|
||
|
|
files, err := f.Readdir(0)
|
||
|
|
check(err)
|
||
|
|
|
||
|
|
for _, v := range files {
|
||
|
|
parsed_files = append(parsed_files, v.Name())
|
||
|
|
}
|
||
|
|
|
||
|
|
//fmt.Println(parsed_files)
|
||
|
|
|
||
|
|
return parsed_files
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* * Receives error as a parameter and panics if error is not null
|
||
|
|
*/
|
||
|
|
func check(e error) {
|
||
|
|
if e != nil {
|
||
|
|
panic(e)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//var db *sql.DB
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
//var src_dir = "/etc"
|
||
|
|
|
||
|
|
//func mysort(names []string) []string {
|
||
|
|
//names := []string{"paul","john","michaels"
|
||
|
|
// sorted_names := []string{}
|
||
|
|
|
||
|
|
// if len(names) > 1 {
|
||
|
|
// for index, name := range names {
|
||
|
|
// fmt.Printf("Index: %v, Value: %v\n",index,name)
|
||
|
|
// sorted_names = append(sorted_names, names[index])
|
||
|
|
// }
|
||
|
|
// } else {
|
||
|
|
// fmt.Println("names is empty!")
|
||
|
|
// }
|
||
|
|
|
||
|
|
//fmt.Println(10)
|
||
|
|
// return sorted_names
|
||
|
|
//}
|
||
|
|
|
||
|
|
|
||
|
|
//func main() {
|
||
|
|
|
||
|
|
//dbcfg := mysql.Config{
|
||
|
|
// User: "root",
|
||
|
|
// Passwd: "",
|
||
|
|
// Net: "tcp",
|
||
|
|
// Addr: "localhost:3306",
|
||
|
|
// DBName: "mysql"
|
||
|
|
//}
|
||
|
|
|
||
|
|
//greeting := "hello there friends!"
|
||
|
|
|
||
|
|
// fmt.Println(strings.Contains(greeting, "hello!"))
|
||
|
|
// fmt.Println(strings.ReplaceAll(greeting, "hello!", "hi"))
|
||
|
|
// fmt.Println(strings.ToUpper(greeting))
|
||
|
|
// fmt.Println(strings.Index(greeting, "th"))
|
||
|
|
// fmt.Println(strings.Splt(greeting, " "))
|
||
|
|
//ages := []int{1,2,3,i4,5,6,7,8,9};
|
||
|
|
//names := []string{"paul","john","michaels"}
|
||
|
|
// sort.Ints(ages)
|
||
|
|
// sort.Strings(names)
|
||
|
|
//fmt.Println(sort.SearchStrings(names,"paul"))
|
||
|
|
//https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqazNFaDR4R1RPQVZoUVpyZUlwcThaRmc4OXZFZ3xBQ3Jtc0tscFJDQW5pWjZGa0QzZHZnRy1fbWpCYXF4UUNFOEoyNjJlcGRQaWl2WVhpRGktbG9tdnFlVUVqVkczSS0zSnVXZFBzTGktUHJaaUx6eUVxWmpORkVfRldTY1hxTVQ4aXdLa3lVWnVJZkNOSlpXYnZNMA&q=https%3A%2F%2Fgolang.org%2Fpkg%2F&v=BoooHY57RXw
|
||
|
|
// fmt.Println(mysort(names))
|
||
|
|
//}
|
||
|
|
|