1 回答
TA貢獻1848條經驗 獲得超10個贊
這里的問題是內部使用緩沖讀取器,因此當您執(zhí)行時,您將獲得基礎文件上的位置,但讀取了一些數(shù)據(jù)并且您沒有使用它。encoding/csvfile.Seek(0, io.SeekCurrent)
有兩種可能的解決方案:
一種是使用較低級別的實現(xiàn),允許準確控制您所在的位置
另一個是找出有多少緩沖數(shù)據(jù)。
我將向您展示第二個選項的實現(xiàn)(請注意,這依賴于對包內部工作的一些了解,如果更改,可能會停止工作)encoding/csv
首先,在創(chuàng)建 csv 之前創(chuàng)建一個新的緩沖 io 讀取器:
//Position the file pointer to the start point
file.Seek(startAt, io.SeekStart)
bReader := bufio.NewReader(file)
//Create a reader
reader := csv.NewReader(bReader)
這將允許您訪問緩沖區(qū)。您可以像以前一樣使用此讀取器,但最終您可以通過以下方式計算文件上的最終位置:
bufSize := bReader.Buffered() filePos, err := file.Seek(0, io.SeekCurrent) return filePos - int64(bufSize)
這將采用文件中的當前位置并刪除已創(chuàng)建的緩沖區(qū)。
請注意,返回的值是文件中的位置,而不是在此函數(shù)調用中讀取的字節(jié)數(shù)。
- 1 回答
- 0 關注
- 100 瀏覽
添加回答
舉報
