Я сделал небольшое служебное приложение, которое записывает его вывод в несколько файлов. Служба должна работать как на Windows, так и на Linux. В Windows все очень сложно, но в Linux файлы создаются, но все они пустые.Файл заполнен данными в Windows, но не в Linux
Следующая небольшая программа точно показывает такое же поведение:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("test.txt", os.O_APPEND|os.O_CREATE, 0777)
if err != nil {
fmt.Println(err.Error())
return
}
defer f.Close()
w := bufio.NewWriter(f)
_, err = w.Write([]byte("hello"))
if err != nil {
fmt.Println(err.Error())
}
w.Flush()
}
При запуске выше код не выводить какие-либо ошибки на Linux. Как видно из размера файла test.txt, он записывает содержимое в файл в Windows, в то время как он не работает в Linux.
Справочник по Windows:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 14.04.2016 10:37 345 main.go
-a---- 14.04.2016 10:45 10 test.txt
-a---- 14.04.2016 10:37 2635264 writetest.exe
Справочник по Linux:
drwxrwxr-x 2 localuser localuser 4096 Apr 14 10:55 ./
drwxr-xr-x 8 localuser localuser 4096 Apr 14 10:27 ../
-rw-rw-r-- 1 localuser localuser 345 Apr 14 10:37 main.go
-rwxrwxr-x 1 localuser localuser 0 Apr 14 10:55 test.txt*
Что я здесь отсутствует?
Хотя это, кажется, полностью делает трюк, я до сих пор не понимаю его полностью: почему это так? И более того: почему нет ошибки, вызванной w.Write? –
Вы пишете файл bufio, поэтому он просто сохраняет данные в своем буфере без каких-либо проблем. Однако вызов w.Flush(), вероятно, вернет ошибку. –
Facepalm! w.Flush() действительно возвращает ошибку ... –