Tak, masz to. Funkcje ioutil to tylko udogodnienia, które zajmują się typowymi zadaniami. Jeśli chcesz mieć większą kontrolę, zobacz pakiet systemu operacyjnego.
Dlaczego nie tryb pliku 0666? Myślałem, że to lepsza wartość domyślna.
Dmitri Shuralyov
1
@SridharRatnakumar: zobacz kolejny komentarz i człowiek umask . Z typową umaską 022, otrzymasz typowe uprawnienia:0666 & ~022 = 0644 = rw-r--r--
akavel
55
os.O_CREATE dobrze jest dołączyć, jeśli plik może jeszcze nie istnieć.
bugloaf
2
może trochę głupie pytanie, ale po co mu oba os.O_APPENDi os.O_WRONLY? To na pewno działa, ale dlaczego oba?
Dusan Gligoric
os.O_APPEND i os.O_WRONLY os.O_APPEND mają sterować zachowaniem w tym przypadku w trybie dołączania, więc nie ma potrzeby utrzymywania wskaźnika pliku. os.O_WRONLY służy do określania trybu pliku, czy to odczytu, zapisu, czy obu, w tym przypadku zapisu.
Odpowiedzi:
Ta odpowiedź działa w Go1:
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600) if err != nil { panic(err) } defer f.Close() if _, err = f.WriteString(text); err != nil { panic(err) }
źródło
0666 & ~022 = 0644 = rw-r--r--
os.O_APPEND
ios.O_WRONLY
? To na pewno działa, ale dlaczego oba?Go docs ma doskonały przykład :
package main import ( "log" "os" ) func main() { // If the file doesn't exist, create it, or append to the file f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatal(err) } if _, err := f.Write([]byte("appended some data\n")); err != nil { log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } }
źródło
Domyśliłam się
Więcej informacji
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close()
źródło
... użyłbym fmt.Fprintf, ponieważ akceptuję pisarza ... a połączenie lub pliki będą pisarzem i łatwym do napisania w postaci ciągu ...
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) if err != nil { panic(err) } defer f.Close() fmt.Fprintf(f, "%s", text)
Mam nadzieję, że ta pomoc!
Javier,
źródło
Jeśli chcesz również utworzyć plik
f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
źródło
Powiedzmy, że chcesz dodać zawartość pliku
current
do plikuall
, wtedy działa poniższy kod:func updateTrx() { var err error var f *os.File // If the file doesn't exist, create it, or append to the file if f, err = os.OpenFile("all.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil { log.Fatal(err) } defer func() { if err := f.Close(); err != nil { log.Fatal("error", err) } }() var current *os.File if current, err = os.OpenFile("current.csv", os.O_RDONLY, 0); err != nil { log.Fatal("error", err) } defer func() { if err := current.Close(); err != nil { log.Fatal("error", err) } }() if fileBytes, err := ioutil.ReadAll(current); err != nil { log.Fatal("error", err) } else { if _, err := f.Write([]byte(fileBytes)); err != nil { log.Fatal(err) } } }
źródło
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644) if err != nil { panic(err) } defer f.Close() if _, err = f.WriteString(text); err != nil { panic(err) }
niewielka zmiana w oparciu o stronę golang i komentarz z największą liczbą głosów.
źródło