Go File.Readdir()可以';你不会被多次打电话吗?
当我学习Golang时,我编写了以下代码:Go File.Readdir()可以';你不会被多次打电话吗?,go,Go,当我学习Golang时,我编写了以下代码: list1,_ := f.Readdir(-1) len(list1) //some value list2,_ := f.Readdir(-1) len(list2) //0 当os.File的方法Readdir()多次调用时,它将始终返回空的[]FileInfo 我想知道为什么?如何使我的代码工作?根据Golang规范: 如果n>0,Readdir最多返回n个FileInfo结构。在这种情况下,, 如果Readdir返回一个空切片,它将返回一个
list1,_ := f.Readdir(-1)
len(list1) //some value
list2,_ := f.Readdir(-1)
len(list2) //0
当os.File的方法Readdir()多次调用时,它将始终返回空的[]FileInfo
我想知道为什么?如何使我的代码工作?根据Golang规范: 如果n>0,Readdir最多返回n个FileInfo结构。在这种情况下,, 如果Readdir返回一个空切片,它将返回一个非nil错误 解释原因。在目录的末尾,错误是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表示相对于当前偏移
结束。它返回新的偏移量和错误(如果有)
“对同一文件的后续调用将产生更多的FileInfos。[…]如果n@robx是一个exmaple,请让我将其设置为
0
偏移量以查找指向文件开头的指针。通过提供可读代码来树立一个好的示例。写入io.SeekStart
,而不是0
,以获取从何处值: