File.Readdir()不能被多次调用?

时间:2018-08-24 07:30:07

标签: go

学习Golang时,我写下面的代码:

list1,_ := f.Readdir(-1)
len(list1) //some value

list2,_ := f.Readdir(-1)
len(list2) //0

当os.File的方法Readdir()多次调用时,它将始终返回一个空的[] FileInfo。

我想知道为什么吗?以及如何使我的代码正常工作?

1 个答案:

答案 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表示相对于当前偏移量   结束。它返回新的偏移量和错误(如果有)。