Запись в файл, а затем сразу же прочитать его на ходу - PullRequest
0 голосов
/ 05 октября 2018

Как говорится в заголовке, у меня проблема с чтением файла, в который я записал незадолго до чтения.Читатель паникует с EOF.Я отлаживал различные внутренние компоненты go, и кажется, что по какой-то причине он не может прочитать какой-либо контент из источника, хотя источник синхронизирован с файловой системой (что подтверждается остановкой программы сразу после записи и проверкой файла с помощьюcat)

Вот код

source, err := os.Create(DESKTOP + "/source.txt")
myPanic(err)

s := "Hello World\n"
_, err1 := source.Write([]byte(s))

myPanic(err1)
source.Sync()

buff := make([]byte, 56)
_, err2 := source.Read(buff)
myPanic(err2)e

Как уже упоминалось, source.Sync() не имеет никакого эффекта, но закрытие файла и его повторное открытие решает проблему.

В документе doc для os.Create() указано, что файл создан с O_RDWR, что говорит о том, что использовать файл таким способом можно.Я думаю, что что-то упустил по пути.

Просто ради полноты: пример - это не оригинальная проблема, с которой я столкнулся, а просто простейший возможный случай, который я придумал после своего исследования.

Изначально я хотел скопировать исходный файл с помощью os.Copy, который создает пустой конечный файл.

1 Ответ

0 голосов
/ 05 октября 2018

Вы находитесь в конце вашего файла, поэтому чтение оттуда не вернет никаких новых данных.Искать в начале вашего файла:

source.Seek(0, io.SeekStart)
...