已实现增量的文件列表提取

下一步,作判断,然后,解压和获取列表。

 

list-dir-file.go

package main

import (
	"fmt"

	"io/ioutil"
	"path/filepath"
)

func GetAllFile(pathname string, files []string) ([]string, error) {
	fromSlash := filepath.FromSlash(pathname)
	//fmt.Println(fromSlash)
	rd, err := ioutil.ReadDir(fromSlash)
	if err != nil {
		//log.LOGGER("Error").Error("read dir fail %v\n", err)
		fmt.Println("read dir fail:", err)
		return files, err
	}
	for _, fi := range rd {
		if fi.IsDir() {
			fullDir := filepath.Join(fromSlash, fi.Name())
			files, err = GetAllFile(fullDir, files)
			if err != nil {
				fmt.Println("read dir fail:", err)
				//log.LOGGER("Error").Error("read dir fail: %v\n", err)
				return files, err
			}
		} else {
			fullName := filepath.Join(fromSlash, fi.Name())
			files = append(files, fullName)
		}
	}
	return files, nil

}

  

write-read-file.go

package main

import (
	"bufio"
	"fmt"
	"io"

	"os"
)

func WritetoFile(fileName string, content []string) error {
	f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
	if err != nil {
		fmt.Printf("create map file error: %v\n", err)
		return err
	}
	defer f.Close()

	w := bufio.NewWriter(f)

	for _, item := range content {
		fmt.Fprintln(w, item)
	}
	return w.Flush()
}

func ReadFromFile(fileName string) ([]string, error) {
	content := []string{}
	fi, err := os.Open(fileName)
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return nil, err
	}
	defer fi.Close()

	br := bufio.NewReader(fi)
	for {
		item, _, c := br.ReadLine()
		if c == io.EOF {
			break
		}
		content = append(content, string(item))
	}
	return content, nil
}

  

unzip.go

package main

import (
	"archive/zip"
	"io"
	"os"
	"path/filepath"
)

func Unzip(zipFile string, destDir string) error {
	zipReader, err := zip.OpenReader(zipFile)
	if err != nil {
		return err
	}
	defer zipReader.Close()

	for _, f := range zipReader.File {
		fpath := filepath.Join(destDir, f.Name)
		if f.FileInfo().IsDir() {
			os.MkdirAll(fpath, os.ModePerm)
		} else {
			if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
				return err
			}

			inFile, err := f.Open()
			if err != nil {
				return err
			}
			defer inFile.Close()

			outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
			if err != nil {
				return err
			}
			defer outFile.Close()

			_, err = io.Copy(outFile, inFile)
			if err != nil {
				return err
			}
		}
	}
	return nil
}

  

main.go

package main

import (
	"fmt"
	"os"
)

func main() {
	var oldContent, newContent, increaseContent []string
	oldMap := make(map[string]int)
	logFile := "D:\\temp\\log.txt"

	oldContent, err := ReadFromFile(logFile)
	if err != nil && os.IsNotExist(err) {
		fmt.Println(err)
		fmt.Println("first")
	} else if err != nil && !os.IsNotExist(err) {
		panic(err)
	} else {
		for _, v := range oldContent {
			oldMap[v] = 0
		}
	}

	newContent, err = GetAllFile("D:\\software", newContent)
	if err != nil {
		panic(err)
	}
	newContent = append(newContent, "morefile1")
	newContent = append(newContent, "morefile2")
	err = WritetoFile(logFile, newContent)
	if err != nil {
		panic(err)
	}

	for _, v := range newContent {
		if _, ok := oldMap[v]; !ok {
			increaseContent = append(increaseContent, v)
		}
	}

	for _, v := range increaseContent {
		fmt.Println(v)
	}

	zipFile := "D:\\software\\tools\\lib\\commons-logging-1.1.1.jar"
	desDir := "D:\\temp\\commons-logging-1.1.1"
	err = Unzip(zipFile, desDir)
	if err != nil {
		panic(err)
	}
}

  已实现增量的文件列表提取_第1张图片

 

你可能感兴趣的:(已实现增量的文件列表提取)