Beispiel #1
0
func read_file_stat(file string) {
	//	arr := make([]int16,256,256)
	defer wg.Done()
	fmt.Printf("Start calc '%s'\n", file)
	fs := new(common.FileStat)
	fs.Filename = file
	fh, err := os.Open(file)
	if err != nil {
		return
	}
	defer fh.Close()
	stat, err := fh.Stat()
	if err != nil {
		return
	}
	// read the file
	// "eat" file by small part (not whole file if it is so big)
	file_size := stat.Size()
	var part_size int64 = BUFFER_SIZE
	for file_size > 0 {
		if file_size < part_size {
			file_size = part_size
		}
		bs := make([]byte, part_size)
		_, err = fh.Read(bs)
		if err != nil {
			return
		}
		// It can be go-routine but it will increase used memory size
		for _, b := range bs {
			fs.Inc(b)
		}
		file_size -= part_size
	}

	//    str := string(bs)
	//    fmt.Println(str)
	fmt.Println("Publish result ", file)
	results <- fs
}