在此代码中,我试图读取目录中的书名,然后将它们写入 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 关注
- 103 浏览
添加回答
举报
0/150
提交
取消