1.copy文件
(1)小文件
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
)
func copyfile(src,desc string) {
srcfile,err := os.Open(src)
if err != nil {
fmt.Println(err)
} else {
defer srcfile.Close()
descfile,err := os.Create(desc)
if err != nil {
fmt.Println(err)
}else {
defer descfile.Close()
bytes,err := ioutil.ReadAll(srcfile)
if err != nil {
fmt.Println(err)
}else {
descfile.Write(bytes)
}
}
}
}
func main() {
src := flag.String("s","","src file")
desc := flag.String("d","","desc file")
help := flag.Bool("h",false,"help")
flag.Usage = func() {
fmt.Println("Usage: copyfile -s xxx -d xxx")
flag.PrintDefaults()
}
//解析参数
flag.Parse()
if *src == "" || *desc == "" || *help {
flag.Usage()
} else {
copyfile(*src,*desc)
}
}
(2)大文件(用带缓冲的)
package main
import (
"bufio"
"flag"
"fmt"
"io"
"io/ioutil"
"os"
)
func copyfile(src,desc string) {
srcfile,err := os.Open(src)
if err != nil {
fmt.Println(err)
} else {
defer srcfile.Close()
descfile,err := os.Create(desc)
if err != nil {
fmt.Println(err)
}else {
defer descfile.Close()
if err != nil {
fmt.Println(err)
}else {
bytes := make([]byte,1024*1024)
reader := bufio.NewReader(srcfile)
writer := bufio.NewWriter(descfile)
for {
n, err := reader.Read(bytes)
if err != nil {
if err != io.EOF {
fmt.Println(err)
}
break
}
writer.Write(bytes[:n])
writer.Flush()
}
}
}
}
}
func main() {
src := flag.String("s","","src file")
desc := flag.String("d","","desc file")
help := flag.Bool("h",false,"help")
flag.Usage = func() {
fmt.Println("Usage: copyfile -s xxx -d xxx")
flag.PrintDefaults()
}
//解析参数
flag.Parse()
if *src == "" || *desc == "" || *help {
flag.Usage()
} else {
copyfile(*src,*desc)
}
}
2.logs输出到文件中
package main
import (
"log"
"os"
"time"
)
func main() {
path := "user3.txt"
file,err := os.OpenFile(path,os.O_APPEND|os.O_CREATE,os.ModePerm)
if err == nil {
log.SetOutput(file)
log.SetPrefix("users")
log.SetFlags(log.Flags()|log.Lshortfile)
log.Print(time.Now().Unix())
file.Close()
}
}
3.md5
(1)小文件
package main
import (
"crypto/md5"
"flag"
"fmt"
"io/ioutil"
)
func main() {
s := flag.String("s","","strings")
f := flag.String("f","","path")
h := flag.Bool("h",false,"help")
flag.Usage = func() {
fmt.Println("-s string or -f /txt")
flag.PrintDefaults()
}
flag.Parse()
if *h || *s == "" && *f == ""{
flag.Usage()
} else if *s != ""{
fmt.Printf("%x\n",md5.Sum([]byte(*s)))
}else if *f != "" {
file,err := ioutil.ReadFile(*f)
if err != nil {
fmt.Println(err)
}else {
fmt.Printf("%x\n",md5.Sum(file))
}
}
}
(2)大文件(不带缓冲)
package main
import (
"crypto/md5"
"flag"
"fmt"
"io"
"os"
)
func Str(str *string ) string{
return fmt.Sprintf("%x",md5.Sum([]byte(*str)))
}
func Txt(path string) string{
file ,err := os.Open(path)
if err != nil {
fmt.Println(err)
}else {
defer file.Close()
bytes := make([]byte,1024*1024*10)
haxer := md5.New()
for {
n,err := file.Read(bytes)
//如果不是nil那么可能是io.eof或者是报错
if err != nil {
//如果不是nil 也不是io.eof 那么就是报错 打印出来
if err != io.EOF {
fmt.Println(err)
}
//如果是io.eof 那么就退出
break
}else {
//在读的过程中写入
haxer.Write(bytes[:n])
}
}
//返回一个md5
return fmt.Sprintf("%x",haxer.Sum(nil))
}
return ""
}
func main() {
s := flag.String("s","","strings")
f := flag.String("f","","path")
h := flag.Bool("h",false,"help")
flag.Usage = func() {
fmt.Println("-s string or -f /txt")
flag.PrintDefaults()
}
flag.Parse()
if *h || *s == "" && *f == ""{
flag.Usage()
} else if *s != ""{
fmt.Println(Str(s))
}else if *f != "" {
fmt.Println(Txt(*f))
}
}
(3)大文件(带缓冲)
package main
import (
"bufio"
"crypto/md5"
"flag"
"fmt"
"io"
"os"
"strings"
)
func Md5(reader *bufio.Reader)string {
bytes := make([]byte,1024*1024*10)
haxer := md5.New()
for {
n,err := reader.Read(bytes)
//如果不是nil那么可能是io.eof或者是报错
if err != nil {
//如果不是nil 也不是io.eof 那么就是报错 打印出来
if err != io.EOF {
fmt.Println(err)
}
//如果是io.eof 那么就退出
break
}else {
//在读的过程中写入
haxer.Write(bytes[:n])
}
}
//返回一个md5
return fmt.Sprintf("%x",haxer.Sum(nil))
}
func Str(str string ) string{
return Md5(bufio.NewReader(strings.NewReader(str)))
}
func Txt(path string) string{
file ,err := os.Open(path)
if err != nil {
fmt.Println(err)
}else {
defer file.Close()
return Md5(bufio.NewReader(file))
}
return ""
}
func main() {
s := flag.String("s","","strings")
f := flag.String("f","","path")
h := flag.Bool("h",false,"help")
flag.Usage = func() {
fmt.Println("-s string or -f /txt")
flag.PrintDefaults()
}
flag.Parse()
if *h || *s == "" && *f == ""{
flag.Usage()
} else if *s != ""{
fmt.Println(Str(*s))
}else if *f != "" {
fmt.Println(Txt(*f))
}
}