需求
判斷某一文件夾是否存在,文件夾內csv文件是否存在,往文件內追加寫入內容
相關函數
1.time.Now() 獲取當前時間,返回數據類型為golang時間
<code>func Now() Time
eg:
today := time.Now()/<code>
2.Unix() 時間格式轉時間戳
<code>func Unix(sec int64, nsec int64) Time
eg:
time.Now.Unix()/<code>
3.Format() 格式化時間、時間戳
<code>today := time.Now().Unix()
today_time := time.Unix(today, 0).Format("2006-01-02 15:04:05")
today_time_2 := today.Format("2006-01-02 15:04:05")/<code>
4.Stat() 獲取文件屬性
<code>func Stat(name string) (fi FileInfo, err error)
eg:
_, err := os.Stat("./csv/test.csv")/<code>
5.MkdirAll() 根據傳入地址,遞歸創建文件夾
<code>func MkdirAll(path string, perm FileMode) error
eg:
os.MkdirAll("./csv/test.csv", os.ModePerm)/<code>
6.OpenFile()打開文件
<code>func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
eg:
file, err := os.OpenFile(file_path, os.O_RDWR, os.ModePerm)/<code>
7.操作csv相關函數
<code>func NewWriter(w io.Writer) *Writer
func (w *Writer) Flush()
func (w *Writer) Write(record []string) (err os.Error)
func (w *Writer) WriteAll(records [][]string) (err os.Error)/<code>
8.Seek() 將下一個讀或寫文件的偏移量設置為偏移量,根據其解釋:0表示相對於文件的原點,1表示相對於當前偏移量,2表示相對於結尾
<code>func (f *File) Seek(offset int64, whence int) (ret int64, err error)/<code>
完整demo
<code>package main
import (
\t"fmt"
\t"os"
\t"encoding/csv"
\t"time"
\t"io"
)
/**
*csv文件追加寫入neir
*author 百思達
*/
func main() {
\t//csv文件以天數命名
\ttoday := time.Now().Unix()
\ttoday_time := time.Unix(today, 0).Format("2006-01-02")
\t//文件路徑
\tfile_path := "./csv/" + today_time + ".csv"// eg: ./csv/2020-03-08.csv
\t//判斷文件夾是否存在,不存在則創建
\t_, err := os.Stat("./csv")
if err != nil{
if os.IsNotExist(err) {
\t\t\t\t\terr = os.MkdirAll("./csv", os.ModePerm)
\t\t\t\t if err != nil {
\t\t\t \t panic(err)
\t\t\t }
}
\t}
\t//打開操作-不存在則創建
\tfile, _ := os.OpenFile(file_path, os.O_RDWR|os.O_CREATE, os.ModePerm)
\tfile.Seek(0, io.SeekEnd)//註釋本行則不會追加寫入
\t//關閉文件
\tdefer file.Close()
\t//寫入操作
\tw := csv.NewWriter(file)
\tw.Write([]string{"123", "234234", "345345", "234234"})
\t//必須刷新,否則內容無法寫入文件
\tw.Flush()
\t
\tfmt.Println("ok")
}/<code>