2012-06-05 6 views
5

Mam File i chcę znaleźć przesunięcie pliku/pozycji, co byłoby fgetpos w stdio. Nie mogę go znaleźć w http://golang.org/pkg/io/. Czy muszę to liczyć samemu, czy istnieje metoda kompilacji?fgetpos dostępne w Go? Chcesz znaleźć File.Position

+0

Pakiet "io" zawiera kod dla ogólnych operacji wejścia/wyjścia niezwiązanych z plikami. Pliki są powiązane z systemem operacyjnym i znajdują się w pakiecie "os". – Jessta

+0

Tak, ale chciałem to zrobić za pomocą interfejsu (tak się składa, że ​​pisałem własną "klasę", aby dostarczyć fałszywego pliku do testowania dodatkowo). – Joe

Odpowiedz

10

Powinieneś być w stanie wykonać Seek() na 0 bajtów z bieżącej pozycji, która zwraca wynikową pozycję. Nie jestem w 100% pewna, że ​​wynik jest absolutną pozycją, na którą lecisz, ale oczekiwałbym, że tak się stanie.

+0

To może po prostu zadziałać! Spróbuję, kiedy go potrzebuję. – Joe

+1

Genialny. Całkowicie przegapiłem wartość zwrotu i miałem właśnie się poddać, kiedy uratowałeś mi tyłek. Przetestowane i działa, dzięki! – zupa

+0

Uwaga, to ** nie będzie ** działać dla plików otwartych z flagą 'O_APPEND'. W dokumentacji 'Seek' pojawia się ostrzeżenie o niezdefiniowanym zachowaniu, a więcej szczegółów jest dostępnych tutaj: https://github.com/golang/go/issues/12710. Istnieje warunek wyścigu, ale jeśli zapewnione jest blokowanie ('syscall.Flock', więc inne procesy są blokowane oraz niektóre' sync.Mutex' tak, aby inne gorączki w bieżącym procesie były również blokowane) to metoda 'Stat' może zapewnić bieżącą" pozycję " z 'FileInfo.Size'. – drdaeman

Powiązane problemy