在此代碼中,我試圖讀取目錄中的書名,然后將它們寫入 CSV 文件,但它只將第一本書名寫入 CSV 文件。我不知道如何讓它進一步工作。package mainimport ( "encoding/csv" "io/ioutil" "log" "os")func main() { files, err := ioutil.ReadDir("/home/bilal/Documents/Books/English") if err != nil { log.Fatal(err) } csvFile, err := os.Create("English.csv") if err != nil { log.Fatal(err) } for _, file := range files { // fmt.Println(file.Name()) fileData := []string{ file.Name(), } csvWriter := csv.NewWriter(csvFile) csvWriter.Write(fileData) csvWriter.Flush() csvFile.Close() }}
1 回答

手掌心
TA貢獻1942條經驗 獲得超3個贊
問題是你在循環內關閉文件,所以在第一次迭代之后它已經關閉了。此外,無需csvWriter在循環內創建,您可以創建一個并在循環后刷新它。請注意,您可以在創建文件句柄和編寫器后立即使用defer 語句設置清理代碼(這樣,您不必擔心在控制流可能從函數返回的任何地方顯式包含清理代碼). 在離開函數之前,defer 語句將以相反的順序執行,因此在下面的示例中csvWriter.Flush()將按預期執行 before csvFile.Close():
// ...
csvFile, err := os.Create("English.csv")
if err != nil {
log.Fatal(err)
}
defer csvFile.Close()
csvWriter := csv.NewWriter(csvFile)
defer csvWriter.Flush()
for _, file := range files {
fileData := []string{ file.Name() }
csvWriter.Write(fileData)
}
// ...
- 1 回答
- 0 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消