2011-08-22 31 views
38

Vì vậy, tôi có thể đọc từ một tập tin địa phương như vậy:Nối vào một tập tin tại Gò

data, error := ioutil.ReadFile(name) 

Và tôi có thể viết vào một tập tin địa phương

ioutil.WriteFile(filename, content, permission) 

Nhưng làm thế nào tôi có thể thêm vào một tập tin ? Có phương pháp tích hợp nào không?

+3

Yep, bạn đã nhận nó. Các chức năng ioutil chỉ là tiện lợi để xử lý các tác vụ thông thường. Nếu bạn muốn kiểm soát nhiều hơn, xem gói os. –

Trả lời

76

này trả lời trong tác phẩm Go1:

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) 
if err != nil { 
    panic(err) 
} 

defer f.Close() 

if _, err = f.WriteString(text); err != nil { 
    panic(err) 
} 
+2

Tại sao không 0666 chế độ tệp? Tôi nghĩ đó là một giá trị mặc định tốt hơn. –

+1

@SridharRatnakumar: xem [bình luận khác] (http://stackoverflow.com/questions/2245193/c-linux-file-permission-problem-with-open#comment-2203227) và _ [man umask] (http://man7.org/linux/man-pages/man2/umask.2.html)_. Với umask điển hình của 022, bạn sẽ nhận được các quyền điển hình: '0666 & ~ 022 = 0644 = rw-r - r -' – akavel

+17

os.O_CREATE là tốt để bao gồm nếu tệp có thể chưa tồn tại. – bugloaf

15

đặn nó ra

More info

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) 

n, err := f.WriteString(text) 

f.Close() 
+7

bạn cũng nên sử dụng os.O_WRONLY – zhaozhi

+0

http://stackoverflow.com/questions/33851692/golang-bad-file-descriptor#answer-33852107 "theo mặc định bạn sẽ nhận được bộ mô tả tệp chỉ đọc". –

3

... Tôi sẽ sử dụng fmt.Fprintf, bởi vì chấp nhận một nhà văn ... và một kết nối hoặc tệp sẽ là một người viết và dễ dàng viết theo một cách chuỗi ...

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) 

Tôi hy vọng sự trợ giúp này!

Javier,

-1

Nếu bạn cũng muốn tạo file

f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)

12

Go docs có perfect example:

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) 
    } 
} 
Các vấn đề liên quan