学习Golang时,我写下面的代码:
list1,_ := f.Readdir(-1)
len(list1) //some value
list2,_ := f.Readdir(-1)
len(list2) //0
当os.File的方法Readdir()多次调用时,它将始终返回一个空的[] FileInfo。
我想知道为什么吗?以及如何使我的代码正常工作?
答案 0 :(得分:2)
根据Readdir的Golang规范:
如果n> 0,则Readdir最多返回n个FileInfo结构。在这种情况下, 如果Readdir返回一个空片,它将返回一个非null错误 解释原因。在目录末尾,错误是io.EOF。
它返回空,因为您已经到达文件末尾EOF
。如果要再次读取同一文件。您应该将指针移到文件的开头以再次读取它。
list1,_ := f.Readdir(-1)
len(list1) //some value
if _, err := f.Seek(0, 0); err != nil { // seek to the start of the file
panic(err)
}
list2,_ := f.Readdir(-1)
len(list2) // will not return 0
寻找文件指针很容易:
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
Seek设置下一个文件读取或写入的偏移量为偏移量, 根据何处解释:0表示相对于原点 文件,1表示相对于当前偏移量,2表示相对于当前偏移量 结束。它返回新的偏移量和错误(如果有)。