Go练习题(6)

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))
	}
}
发布了112 篇原创文章 · 获赞 12 · 访问量 6674

猜你喜欢

转载自blog.csdn.net/weixin_45413603/article/details/104963398