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