87 Итак, я могу читать из локального файла вот так: data, error := ioutil.ReadFile(name) И я могу записать в локальный файл ioutil.WriteFile(filename, content, permission) Но как я могу добавить в файл? Есть ли встроенный метод? file-io go Севибар источник 4 Да, вы поняли. Функции ioutil - это просто удобства, которые решают общие задачи. Если вам нужен больший контроль, посмотрите пакет os. Эван Шоу Ответы: 147 Эти ответы работают в 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) } Шридхар Ратнакумар источник 3 Почему не 0666 файловый режим? Я думал, что это лучшее значение по умолчанию. Дмитрий Шуралев 1 @SridharRatnakumar: см. Еще один комментарий и man umask . С типичной umask 022 вы получите типичные разрешения:0666 & ~022 = 0644 = rw-r--r-- akavel 55 os.O_CREATE неплохо включить, если файл еще не существует. bugloaf 2 может быть, немного глупый вопрос, но зачем ему и то os.O_APPENDи другое os.O_WRONLY? Это точно работает, но почему оба? Душан Глигорич 51 В документации Go есть отличный пример : 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) } } Джимми Обоньо Абор источник 28 Догадаться Больше информации f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close() Севибар источник 8 вам также следует использовать os.O_WRONLY zhaozhi 08 stackoverflow.com/questions/33851692/… «по умолчанию вы получаете дескриптор файла только для чтения». Хан Цю 5 ... Я бы использовал fmt.Fprintf, потому что принимаю писателя ... и соединение или файлы будут писателем, и их будет легко писать в виде строки ... 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) Надеюсь, это поможет! Хавьер, Хавьер Гутьеррес-Матурана Санк источник 3 Если вы также хотите создать файл f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Люк В источник 0 Допустим, вы хотите добавить содержимое файла currentв файл all, тогда код ниже работает: 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) } } } Хасан А Юсеф источник
147 Эти ответы работают в 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) } Шридхар Ратнакумар источник 3 Почему не 0666 файловый режим? Я думал, что это лучшее значение по умолчанию. Дмитрий Шуралев 1 @SridharRatnakumar: см. Еще один комментарий и man umask . С типичной umask 022 вы получите типичные разрешения:0666 & ~022 = 0644 = rw-r--r-- akavel 55 os.O_CREATE неплохо включить, если файл еще не существует. bugloaf 2 может быть, немного глупый вопрос, но зачем ему и то os.O_APPENDи другое os.O_WRONLY? Это точно работает, но почему оба? Душан Глигорич 51 В документации Go есть отличный пример : 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) } } Джимми Обоньо Абор источник 28 Догадаться Больше информации f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close() Севибар источник 8 вам также следует использовать os.O_WRONLY zhaozhi 08 stackoverflow.com/questions/33851692/… «по умолчанию вы получаете дескриптор файла только для чтения». Хан Цю 5 ... Я бы использовал fmt.Fprintf, потому что принимаю писателя ... и соединение или файлы будут писателем, и их будет легко писать в виде строки ... 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) Надеюсь, это поможет! Хавьер, Хавьер Гутьеррес-Матурана Санк источник 3 Если вы также хотите создать файл f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Люк В источник 0 Допустим, вы хотите добавить содержимое файла currentв файл all, тогда код ниже работает: 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) } } } Хасан А Юсеф источник
51 В документации Go есть отличный пример : 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) } } Джимми Обоньо Абор источник
28 Догадаться Больше информации f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close() Севибар источник 8 вам также следует использовать os.O_WRONLY zhaozhi 08 stackoverflow.com/questions/33851692/… «по умолчанию вы получаете дескриптор файла только для чтения». Хан Цю 5 ... Я бы использовал fmt.Fprintf, потому что принимаю писателя ... и соединение или файлы будут писателем, и их будет легко писать в виде строки ... 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) Надеюсь, это поможет! Хавьер, Хавьер Гутьеррес-Матурана Санк источник 3 Если вы также хотите создать файл f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Люк В источник 0 Допустим, вы хотите добавить содержимое файла currentв файл all, тогда код ниже работает: 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) } } } Хасан А Юсеф источник
5 ... Я бы использовал fmt.Fprintf, потому что принимаю писателя ... и соединение или файлы будут писателем, и их будет легко писать в виде строки ... 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) Надеюсь, это поможет! Хавьер, Хавьер Гутьеррес-Матурана Санк источник
3 Если вы также хотите создать файл f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Люк В источник
0 Допустим, вы хотите добавить содержимое файла currentв файл all, тогда код ниже работает: 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) } } } Хасан А Юсеф источник
Ответы:
Эти ответы работают в 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) }
источник
0666 & ~022 = 0644 = rw-r--r--
os.O_APPEND
и другоеos.O_WRONLY
? Это точно работает, но почему оба?В документации Go есть отличный пример :
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) } }
источник
Догадаться
Больше информации
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close()
источник
... Я бы использовал fmt.Fprintf, потому что принимаю писателя ... и соединение или файлы будут писателем, и их будет легко писать в виде строки ...
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)
Надеюсь, это поможет!
Хавьер,
источник
Если вы также хотите создать файл
f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
источник
Допустим, вы хотите добавить содержимое файла
current
в файлall
, тогда код ниже работает: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) } } }
источник