2012-06-05 8 views
5

Tengo un File y quiero encontrar el archivo offset/posición, lo que sería fgetpos en stdio. Parece que no puedo encontrarlo en http://golang.org/pkg/io/. ¿Tengo que contarlo yo mismo o hay un método de compilación?fgetpos disponible en Go? ¿Desea encontrar File.Position

+0

El paquete 'io' contiene código para E/S general no específica de los archivos. Los archivos están relacionados con el sistema operativo y, por lo tanto, están en el paquete 'os'. – Jessta

+0

Sí, pero quería hacerlo a través de una interfaz (dado que estaba escribiendo mi propia 'clase' para proporcionar un archivo falso para probar además de esto). – Joe

Respuesta

10

Debería poder hacer un Seek() a 0 bytes desde la posición actual, que devuelve la posición resultante. No estoy 100% seguro de que el resultado sea la posición absoluta que buscas, pero espero que así sea.

+0

¡Eso podría funcionar! Lo intentaré cuando lo necesite. – Joe

+1

Genious. Me perdí por completo el valor de devolución y estaba a punto de rendirme cuando salvaste mi trasero. Probado y funciona, gracias! – zupa

+0

Tenga en cuenta que esto ** no funcionará ** para archivos abiertos con el indicador 'O_APPEND'. Hay una advertencia en la documentación 'Seek' sobre el comportamiento indefinido, y hay más detalles disponibles aquí: https://github.com/golang/go/issues/12710. Hay una condición de carrera, pero si el bloqueo está asegurado ('syscall.Flock' para que otros procesos estén bloqueados más algunos' sync.Mutex' para que otros goroutines en el proceso actual también estén bloqueados), el método 'Stat' puede proporcionar la" posición "actual con 'FileInfo.Size'. – drdaeman