gopkg.in/essentialkaos/ek.v3@v3.5.1/fsutil/line_count.go (about) 1 package fsutil 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2009-2016 Essential Kaos // 6 // Essential Kaos Open Source License <http://essentialkaos.com/ekol?en> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "bytes" 12 "io" 13 "os" 14 ) 15 16 // ////////////////////////////////////////////////////////////////////////////////// // 17 18 // LineCount return number of lines in file 19 func LineCount(file string) int { 20 if !CheckPerms("FR", file) { 21 return -1 22 } 23 24 fd, err := os.OpenFile(file, os.O_RDONLY, 0644) 25 26 if err != nil { 27 return -1 28 } 29 30 defer fd.Close() 31 32 // Use 32k buffer 33 buf := make([]byte, 32*1024) 34 count := 0 35 sep := []byte{'\n'} 36 37 for { 38 c, err := fd.Read(buf) 39 if err != nil && err != io.EOF { 40 return count 41 } 42 43 count += bytes.Count(buf[:c], sep) 44 45 if err == io.EOF { 46 break 47 } 48 } 49 50 return count 51 }